]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
RDMA/core: Use kvzalloc when allocating the struct ib_port
authorwangyugui <wangyugui@e16-tech.com>
Tue, 19 Oct 2021 00:26:56 +0000 (08:26 +0800)
committerAndrea Righi <andrea.righi@canonical.com>
Tue, 7 Dec 2021 06:34:02 +0000 (07:34 +0100)
BugLink: https://bugs.launchpad.net/bugs/1952579
[ Upstream commit 911a81c9c7092bfd75432ce79b2ef879127ea065 ]

The 'struct attribute' flex array contains some struct lock_class_key's
which become big when lockdep is turned on. Big enough that some drivers
will not load when CONFIG_PROVE_LOCKING=y because they cannot allocate
enough memory:

 WARNING: CPU: 36 PID: 8 at mm/page_alloc.c:5350 __alloc_pages+0x27e/0x3e0
  Call Trace:
   kmalloc_order+0x2a/0xb0
   kmalloc_order_trace+0x19/0xf0
   __kmalloc+0x231/0x270
   ib_setup_port_attrs+0xd8/0x870 [ib_core]
   ib_register_device+0x419/0x4e0 [ib_core]
   bnxt_re_task+0x208/0x2d0 [bnxt_re]

Link: https://lore.kernel.org/r/20211019002656.17745-1-wangyugui@e16-tech.com
Signed-off-by: wangyugui <wangyugui@e16-tech.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
drivers/infiniband/core/sysfs.c

index 6146c3c1cbe5cd5dba950e1d2d42358f28867f58..8d709986b88c746071b898dd583221d972524ad9 100644 (file)
@@ -757,7 +757,7 @@ static void ib_port_release(struct kobject *kobj)
        if (port->hw_stats_data)
                kfree(port->hw_stats_data->stats);
        kfree(port->hw_stats_data);
-       kfree(port);
+       kvfree(port);
 }
 
 static void ib_port_gid_attr_release(struct kobject *kobj)
@@ -1189,7 +1189,7 @@ static struct ib_port *setup_port(struct ib_core_device *coredev, int port_num,
        struct ib_port *p;
        int ret;
 
-       p = kzalloc(struct_size(p, attrs_list,
+       p = kvzalloc(struct_size(p, attrs_list,
                                attr->gid_tbl_len + attr->pkey_tbl_len),
                    GFP_KERNEL);
        if (!p)