CC: [email protected] BCC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Borislav Petkov <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: d0c745e7b2d6ce8bcc768b32361ab8ef520821ee commit: 9fb9ce392aae0c6654efc42c80e2f6bab88d5fe3 [3084/3449] EDAC/device: Get rid of the silly one-shot memory allocation in edac_device_alloc_ctl_info() :::::: branch date: 12 hours ago :::::: commit date: 32 hours ago config: i386-randconfig-m021-20220411 (https://download.01.org/0day-ci/archive/20220413/[email protected]/config) compiler: gcc-11 (Debian 11.2.0-19) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/edac/edac_device.c:72 edac_device_alloc_ctl_info() warn: Please consider using kcalloc instead Old smatch warnings: drivers/edac/edac_device.c:80 edac_device_alloc_ctl_info() warn: Please consider using kcalloc instead drivers/edac/edac_device.c:89 edac_device_alloc_ctl_info() warn: Please consider using kcalloc instead vim +72 drivers/edac/edac_device.c e27e3dac651771f Douglas Thompson 2007-07-19 49 e27e3dac651771f Douglas Thompson 2007-07-19 50 struct edac_device_ctl_info *edac_device_alloc_ctl_info( e27e3dac651771f Douglas Thompson 2007-07-19 51 unsigned sz_private, 52490c8d07680a7 Douglas Thompson 2007-07-19 52 char *edac_device_name, unsigned nr_instances, 52490c8d07680a7 Douglas Thompson 2007-07-19 53 char *edac_block_name, unsigned nr_blocks, 52490c8d07680a7 Douglas Thompson 2007-07-19 54 unsigned offset_value, /* zero, 1, or other based offset */ d45e7823baf655c Doug Thompson 2007-07-19 55 struct edac_dev_sysfs_block_attribute *attrib_spec, unsigned nr_attrib, d45e7823baf655c Doug Thompson 2007-07-19 56 int device_index) e27e3dac651771f Douglas Thompson 2007-07-19 57 { e27e3dac651771f Douglas Thompson 2007-07-19 58 struct edac_device_ctl_info *dev_ctl; e27e3dac651771f Douglas Thompson 2007-07-19 59 struct edac_device_instance *dev_inst, *inst; e27e3dac651771f Douglas Thompson 2007-07-19 60 struct edac_device_block *dev_blk, *blk_p, *blk; fd309a9d8e63e91 Douglas Thompson 2007-07-19 61 struct edac_dev_sysfs_block_attribute *dev_attrib, *attrib_p, *attrib; e27e3dac651771f Douglas Thompson 2007-07-19 62 unsigned instance, block, attr; 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 63 void *pvt; 1c3631ff1f805cb Douglas Thompson 2007-07-19 64 int err; e27e3dac651771f Douglas Thompson 2007-07-19 65 956b9ba156dbfdb Joe Perches 2012-04-29 66 edac_dbg(4, "instances=%d blocks=%d\n", nr_instances, nr_blocks); e27e3dac651771f Douglas Thompson 2007-07-19 67 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 68 dev_ctl = kzalloc(sizeof(struct edac_device_ctl_info), GFP_KERNEL); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 69 if (!dev_ctl) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 70 return NULL; e27e3dac651771f Douglas Thompson 2007-07-19 71 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 @72 dev_inst = kmalloc_array(nr_instances, 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 73 sizeof(struct edac_device_instance), 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 74 GFP_KERNEL | __GFP_ZERO); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 75 if (!dev_inst) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 76 goto free; e27e3dac651771f Douglas Thompson 2007-07-19 77 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 78 dev_ctl->instances = dev_inst; e27e3dac651771f Douglas Thompson 2007-07-19 79 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 80 dev_blk = kmalloc_array(nr_instances * nr_blocks, 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 81 sizeof(struct edac_device_block), 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 82 GFP_KERNEL | __GFP_ZERO); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 83 if (!dev_blk) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 84 goto free; e27e3dac651771f Douglas Thompson 2007-07-19 85 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 86 dev_ctl->blocks = dev_blk; fd309a9d8e63e91 Douglas Thompson 2007-07-19 87 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 88 if (nr_attrib) { 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 89 dev_attrib = kmalloc_array(nr_attrib, 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 90 sizeof(struct edac_dev_sysfs_block_attribute), 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 91 GFP_KERNEL | __GFP_ZERO); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 92 if (!dev_attrib) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 93 goto free; e27e3dac651771f Douglas Thompson 2007-07-19 94 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 95 dev_ctl->attribs = dev_attrib; 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 96 } 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 97 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 98 if (sz_private) { 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 99 pvt = kzalloc(sz_private, GFP_KERNEL); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 100 if (!pvt) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 101 goto free; 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 102 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 103 dev_ctl->pvt_info = pvt; 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 104 } e27e3dac651771f Douglas Thompson 2007-07-19 105 d45e7823baf655c Doug Thompson 2007-07-19 106 dev_ctl->dev_idx = device_index; e27e3dac651771f Douglas Thompson 2007-07-19 107 dev_ctl->nr_instances = nr_instances; e27e3dac651771f Douglas Thompson 2007-07-19 108 56e61a9c5fe7b79 Doug Thompson 2008-02-07 109 /* Default logging of CEs and UEs */ 56e61a9c5fe7b79 Doug Thompson 2008-02-07 110 dev_ctl->log_ce = 1; 56e61a9c5fe7b79 Doug Thompson 2008-02-07 111 dev_ctl->log_ue = 1; 56e61a9c5fe7b79 Doug Thompson 2008-02-07 112 52490c8d07680a7 Douglas Thompson 2007-07-19 113 /* Name of this edac device */ e27e3dac651771f Douglas Thompson 2007-07-19 114 snprintf(dev_ctl->name, sizeof(dev_ctl->name),"%s", edac_device_name); e27e3dac651771f Douglas Thompson 2007-07-19 115 e27e3dac651771f Douglas Thompson 2007-07-19 116 /* Initialize every Instance */ e27e3dac651771f Douglas Thompson 2007-07-19 117 for (instance = 0; instance < nr_instances; instance++) { e27e3dac651771f Douglas Thompson 2007-07-19 118 inst = &dev_inst[instance]; e27e3dac651771f Douglas Thompson 2007-07-19 119 inst->ctl = dev_ctl; e27e3dac651771f Douglas Thompson 2007-07-19 120 inst->nr_blocks = nr_blocks; e27e3dac651771f Douglas Thompson 2007-07-19 121 blk_p = &dev_blk[instance * nr_blocks]; e27e3dac651771f Douglas Thompson 2007-07-19 122 inst->blocks = blk_p; e27e3dac651771f Douglas Thompson 2007-07-19 123 e27e3dac651771f Douglas Thompson 2007-07-19 124 /* name of this instance */ e27e3dac651771f Douglas Thompson 2007-07-19 125 snprintf(inst->name, sizeof(inst->name), e27e3dac651771f Douglas Thompson 2007-07-19 126 "%s%u", edac_device_name, instance); e27e3dac651771f Douglas Thompson 2007-07-19 127 e27e3dac651771f Douglas Thompson 2007-07-19 128 /* Initialize every block in each instance */ 079708b9173595b Douglas Thompson 2007-07-19 129 for (block = 0; block < nr_blocks; block++) { e27e3dac651771f Douglas Thompson 2007-07-19 130 blk = &blk_p[block]; e27e3dac651771f Douglas Thompson 2007-07-19 131 blk->instance = inst; e27e3dac651771f Douglas Thompson 2007-07-19 132 snprintf(blk->name, sizeof(blk->name), d391a7b8147d12b Douglas Thompson 2007-07-19 133 "%s%d", edac_block_name, block+offset_value); e27e3dac651771f Douglas Thompson 2007-07-19 134 956b9ba156dbfdb Joe Perches 2012-04-29 135 edac_dbg(4, "instance=%d inst_p=%p block=#%d block_p=%p name='%s'\n", 956b9ba156dbfdb Joe Perches 2012-04-29 136 instance, inst, block, blk, blk->name); e27e3dac651771f Douglas Thompson 2007-07-19 137 fd309a9d8e63e91 Douglas Thompson 2007-07-19 138 /* if there are NO attributes OR no attribute pointer fd309a9d8e63e91 Douglas Thompson 2007-07-19 139 * then continue on to next block iteration e27e3dac651771f Douglas Thompson 2007-07-19 140 */ fd309a9d8e63e91 Douglas Thompson 2007-07-19 141 if ((nr_attrib == 0) || (attrib_spec == NULL)) fd309a9d8e63e91 Douglas Thompson 2007-07-19 142 continue; fd309a9d8e63e91 Douglas Thompson 2007-07-19 143 fd309a9d8e63e91 Douglas Thompson 2007-07-19 144 /* setup the attribute array for this block */ fd309a9d8e63e91 Douglas Thompson 2007-07-19 145 blk->nr_attribs = nr_attrib; fd309a9d8e63e91 Douglas Thompson 2007-07-19 146 attrib_p = &dev_attrib[block*nr_instances*nr_attrib]; fd309a9d8e63e91 Douglas Thompson 2007-07-19 147 blk->block_attributes = attrib_p; fd309a9d8e63e91 Douglas Thompson 2007-07-19 148 956b9ba156dbfdb Joe Perches 2012-04-29 149 edac_dbg(4, "THIS BLOCK_ATTRIB=%p\n", dd23cd6eb1f59ba Mauro Carvalho Chehab 2012-04-29 150 blk->block_attributes); b2a4ac0c2860b27 Doug Thompson 2007-07-19 151 fd309a9d8e63e91 Douglas Thompson 2007-07-19 152 /* Initialize every user specified attribute in this fd309a9d8e63e91 Douglas Thompson 2007-07-19 153 * block with the data the caller passed in b2a4ac0c2860b27 Doug Thompson 2007-07-19 154 * Each block gets its own copy of pointers, b2a4ac0c2860b27 Doug Thompson 2007-07-19 155 * and its unique 'value' fd309a9d8e63e91 Douglas Thompson 2007-07-19 156 */ fd309a9d8e63e91 Douglas Thompson 2007-07-19 157 for (attr = 0; attr < nr_attrib; attr++) { e27e3dac651771f Douglas Thompson 2007-07-19 158 attrib = &attrib_p[attr]; e27e3dac651771f Douglas Thompson 2007-07-19 159 b2a4ac0c2860b27 Doug Thompson 2007-07-19 160 /* populate the unique per attrib b2a4ac0c2860b27 Doug Thompson 2007-07-19 161 * with the code pointers and info b2a4ac0c2860b27 Doug Thompson 2007-07-19 162 */ b2a4ac0c2860b27 Doug Thompson 2007-07-19 163 attrib->attr = attrib_spec[attr].attr; b2a4ac0c2860b27 Doug Thompson 2007-07-19 164 attrib->show = attrib_spec[attr].show; b2a4ac0c2860b27 Doug Thompson 2007-07-19 165 attrib->store = attrib_spec[attr].store; b2a4ac0c2860b27 Doug Thompson 2007-07-19 166 b2a4ac0c2860b27 Doug Thompson 2007-07-19 167 attrib->block = blk; /* up link */ b2a4ac0c2860b27 Doug Thompson 2007-07-19 168 956b9ba156dbfdb Joe Perches 2012-04-29 169 edac_dbg(4, "alloc-attrib=%p attrib_name='%s' attrib-spec=%p spec-name=%s\n", dd23cd6eb1f59ba Mauro Carvalho Chehab 2012-04-29 170 attrib, attrib->attr.name, b2a4ac0c2860b27 Doug Thompson 2007-07-19 171 &attrib_spec[attr], b2a4ac0c2860b27 Doug Thompson 2007-07-19 172 attrib_spec[attr].attr.name b2a4ac0c2860b27 Doug Thompson 2007-07-19 173 ); e27e3dac651771f Douglas Thompson 2007-07-19 174 } e27e3dac651771f Douglas Thompson 2007-07-19 175 } e27e3dac651771f Douglas Thompson 2007-07-19 176 } e27e3dac651771f Douglas Thompson 2007-07-19 177 e27e3dac651771f Douglas Thompson 2007-07-19 178 /* Mark this instance as merely ALLOCATED */ e27e3dac651771f Douglas Thompson 2007-07-19 179 dev_ctl->op_state = OP_ALLOC; e27e3dac651771f Douglas Thompson 2007-07-19 180 1c3631ff1f805cb Douglas Thompson 2007-07-19 181 /* 1c3631ff1f805cb Douglas Thompson 2007-07-19 182 * Initialize the 'root' kobj for the edac_device controller 1c3631ff1f805cb Douglas Thompson 2007-07-19 183 */ 1c3631ff1f805cb Douglas Thompson 2007-07-19 184 err = edac_device_register_sysfs_main_kobj(dev_ctl); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 185 if (err) 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 186 goto free; 1c3631ff1f805cb Douglas Thompson 2007-07-19 187 1c3631ff1f805cb Douglas Thompson 2007-07-19 188 /* at this point, the root kobj is valid, and in order to 1c3631ff1f805cb Douglas Thompson 2007-07-19 189 * 'free' the object, then the function: 1c3631ff1f805cb Douglas Thompson 2007-07-19 190 * edac_device_unregister_sysfs_main_kobj() must be called 1c3631ff1f805cb Douglas Thompson 2007-07-19 191 * which will perform kobj unregistration and the actual free 1c3631ff1f805cb Douglas Thompson 2007-07-19 192 * will occur during the kobject callback operation 1c3631ff1f805cb Douglas Thompson 2007-07-19 193 */ 1c3631ff1f805cb Douglas Thompson 2007-07-19 194 e27e3dac651771f Douglas Thompson 2007-07-19 195 return dev_ctl; 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 196 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 197 free: 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 198 __edac_device_free_ctl_info(dev_ctl); 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 199 9fb9ce392aae0c6 Borislav Petkov 2022-03-08 200 return NULL; e27e3dac651771f Douglas Thompson 2007-07-19 201 } e27e3dac651771f Douglas Thompson 2007-07-19 202 EXPORT_SYMBOL_GPL(edac_device_alloc_ctl_info); e27e3dac651771f Douglas Thompson 2007-07-19 203 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
