@@ -145,9 +145,9 @@ static struct regmap *gen_regmap(struct kunit *test,
145145 const struct regmap_test_param * param = test -> param_value ;
146146 struct regmap_test_priv * priv = test -> priv ;
147147 unsigned int * buf ;
148- struct regmap * ret ;
148+ struct regmap * ret = ERR_PTR ( - ENOMEM ) ;
149149 size_t size ;
150- int i ;
150+ int i , error ;
151151 struct reg_default * defaults ;
152152
153153 config -> cache_type = param -> cache ;
@@ -172,15 +172,17 @@ static struct regmap *gen_regmap(struct kunit *test,
172172
173173 * data = kzalloc (sizeof (* * data ), GFP_KERNEL );
174174 if (!(* data ))
175- return ERR_PTR ( - ENOMEM ) ;
175+ goto out_free ;
176176 (* data )-> vals = buf ;
177177
178178 if (config -> num_reg_defaults ) {
179- defaults = kcalloc (config -> num_reg_defaults ,
180- sizeof (struct reg_default ),
181- GFP_KERNEL );
179+ defaults = kunit_kcalloc (test ,
180+ config -> num_reg_defaults ,
181+ sizeof (struct reg_default ),
182+ GFP_KERNEL );
182183 if (!defaults )
183- return ERR_PTR (- ENOMEM );
184+ goto out_free ;
185+
184186 config -> reg_defaults = defaults ;
185187
186188 for (i = 0 ; i < config -> num_reg_defaults ; i ++ ) {
@@ -190,12 +192,19 @@ static struct regmap *gen_regmap(struct kunit *test,
190192 }
191193
192194 ret = regmap_init_ram (priv -> dev , config , * data );
193- if (IS_ERR (ret )) {
194- kfree (buf );
195- kfree (* data );
196- } else {
197- kunit_add_action (test , regmap_exit_action , ret );
198- }
195+ if (IS_ERR (ret ))
196+ goto out_free ;
197+
198+ /* This calls regmap_exit() on failure, which frees buf and *data */
199+ error = kunit_add_action_or_reset (test , regmap_exit_action , ret );
200+ if (error )
201+ ret = ERR_PTR (error );
202+
203+ return ret ;
204+
205+ out_free :
206+ kfree (buf );
207+ kfree (* data );
199208
200209 return ret ;
201210}
@@ -1497,9 +1506,9 @@ static struct regmap *gen_raw_regmap(struct kunit *test,
14971506 struct regmap_test_priv * priv = test -> priv ;
14981507 const struct regmap_test_param * param = test -> param_value ;
14991508 u16 * buf ;
1500- struct regmap * ret ;
1509+ struct regmap * ret = ERR_PTR ( - ENOMEM ) ;
15011510 size_t size = (config -> max_register + 1 ) * config -> reg_bits / 8 ;
1502- int i ;
1511+ int i , error ;
15031512 struct reg_default * defaults ;
15041513
15051514 config -> cache_type = param -> cache ;
@@ -1515,15 +1524,16 @@ static struct regmap *gen_raw_regmap(struct kunit *test,
15151524
15161525 * data = kzalloc (sizeof (* * data ), GFP_KERNEL );
15171526 if (!(* data ))
1518- return ERR_PTR ( - ENOMEM ) ;
1527+ goto out_free ;
15191528 (* data )-> vals = (void * )buf ;
15201529
15211530 config -> num_reg_defaults = config -> max_register + 1 ;
1522- defaults = kcalloc (config -> num_reg_defaults ,
1523- sizeof (struct reg_default ),
1524- GFP_KERNEL );
1531+ defaults = kunit_kcalloc (test ,
1532+ config -> num_reg_defaults ,
1533+ sizeof (struct reg_default ),
1534+ GFP_KERNEL );
15251535 if (!defaults )
1526- return ERR_PTR ( - ENOMEM ) ;
1536+ goto out_free ;
15271537 config -> reg_defaults = defaults ;
15281538
15291539 for (i = 0 ; i < config -> num_reg_defaults ; i ++ ) {
@@ -1536,7 +1546,8 @@ static struct regmap *gen_raw_regmap(struct kunit *test,
15361546 defaults [i ].def = be16_to_cpu (buf [i ]);
15371547 break ;
15381548 default :
1539- return ERR_PTR (- EINVAL );
1549+ ret = ERR_PTR (- EINVAL );
1550+ goto out_free ;
15401551 }
15411552 }
15421553
@@ -1548,12 +1559,19 @@ static struct regmap *gen_raw_regmap(struct kunit *test,
15481559 config -> num_reg_defaults = 0 ;
15491560
15501561 ret = regmap_init_raw_ram (priv -> dev , config , * data );
1551- if (IS_ERR (ret )) {
1552- kfree (buf );
1553- kfree (* data );
1554- } else {
1555- kunit_add_action (test , regmap_exit_action , ret );
1556- }
1562+ if (IS_ERR (ret ))
1563+ goto out_free ;
1564+
1565+ /* This calls regmap_exit() on failure, which frees buf and *data */
1566+ error = kunit_add_action_or_reset (test , regmap_exit_action , ret );
1567+ if (error )
1568+ ret = ERR_PTR (error );
1569+
1570+ return ret ;
1571+
1572+ out_free :
1573+ kfree (buf );
1574+ kfree (* data );
15571575
15581576 return ret ;
15591577}
0 commit comments