Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: qat - replace state machine calls

The device state machine functions are unsafe and interdependent on each
other. To perform a state transition, these shall be called in a
specific order:
* device up: adf_dev_init() -> adf_dev_start()
* device down: adf_dev_stop() -> adf_dev_shutdown()

Replace all the state machine functions used in the QAT driver with the
safe wrappers adf_dev_up() and adf_dev_down().

Signed-off-by: Shashank Gupta <shashank.gupta@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Shashank Gupta and committed by
Herbert Xu
2b60f79c 1bdc8555

+33 -114
+3 -14
drivers/crypto/qat/qat_4xxx/adf_drv.c
··· 411 411 goto out_err_disable_aer; 412 412 } 413 413 414 - ret = hw_data->dev_config(accel_dev); 415 - if (ret) 416 - goto out_err_disable_aer; 417 - 418 - ret = adf_dev_init(accel_dev); 419 - if (ret) 420 - goto out_err_dev_shutdown; 421 - 422 - ret = adf_dev_start(accel_dev); 414 + ret = adf_dev_up(accel_dev, true); 423 415 if (ret) 424 416 goto out_err_dev_stop; 425 417 ··· 422 430 return ret; 423 431 424 432 out_err_dev_stop: 425 - adf_dev_stop(accel_dev); 426 - out_err_dev_shutdown: 427 - adf_dev_shutdown(accel_dev); 433 + adf_dev_down(accel_dev, false); 428 434 out_err_disable_aer: 429 435 adf_disable_aer(accel_dev); 430 436 out_err: ··· 438 448 pr_err("QAT: Driver removal failed\n"); 439 449 return; 440 450 } 441 - adf_dev_stop(accel_dev); 442 - adf_dev_shutdown(accel_dev); 451 + adf_dev_down(accel_dev, false); 443 452 adf_disable_aer(accel_dev); 444 453 adf_cleanup_accel(accel_dev); 445 454 }
+3 -14
drivers/crypto/qat/qat_c3xxx/adf_drv.c
··· 201 201 goto out_err_disable_aer; 202 202 } 203 203 204 - ret = hw_data->dev_config(accel_dev); 205 - if (ret) 206 - goto out_err_disable_aer; 207 - 208 - ret = adf_dev_init(accel_dev); 209 - if (ret) 210 - goto out_err_dev_shutdown; 211 - 212 - ret = adf_dev_start(accel_dev); 204 + ret = adf_dev_up(accel_dev, true); 213 205 if (ret) 214 206 goto out_err_dev_stop; 215 207 216 208 return ret; 217 209 218 210 out_err_dev_stop: 219 - adf_dev_stop(accel_dev); 220 - out_err_dev_shutdown: 221 - adf_dev_shutdown(accel_dev); 211 + adf_dev_down(accel_dev, false); 222 212 out_err_disable_aer: 223 213 adf_disable_aer(accel_dev); 224 214 out_err_free_reg: ··· 229 239 pr_err("QAT: Driver removal failed\n"); 230 240 return; 231 241 } 232 - adf_dev_stop(accel_dev); 233 - adf_dev_shutdown(accel_dev); 242 + adf_dev_down(accel_dev, false); 234 243 adf_disable_aer(accel_dev); 235 244 adf_cleanup_accel(accel_dev); 236 245 adf_cleanup_pci_dev(accel_dev);
+3 -10
drivers/crypto/qat/qat_c3xxxvf/adf_drv.c
··· 173 173 /* Completion for VF2PF request/response message exchange */ 174 174 init_completion(&accel_dev->vf.msg_received); 175 175 176 - ret = adf_dev_init(accel_dev); 177 - if (ret) 178 - goto out_err_dev_shutdown; 179 - 180 - ret = adf_dev_start(accel_dev); 176 + ret = adf_dev_up(accel_dev, false); 181 177 if (ret) 182 178 goto out_err_dev_stop; 183 179 184 180 return ret; 185 181 186 182 out_err_dev_stop: 187 - adf_dev_stop(accel_dev); 188 - out_err_dev_shutdown: 189 - adf_dev_shutdown(accel_dev); 183 + adf_dev_down(accel_dev, false); 190 184 out_err_free_reg: 191 185 pci_release_regions(accel_pci_dev->pci_dev); 192 186 out_err_disable: ··· 200 206 return; 201 207 } 202 208 adf_flush_vf_wq(accel_dev); 203 - adf_dev_stop(accel_dev); 204 - adf_dev_shutdown(accel_dev); 209 + adf_dev_down(accel_dev, false); 205 210 adf_cleanup_accel(accel_dev); 206 211 adf_cleanup_pci_dev(accel_dev); 207 212 kfree(accel_dev);
+3 -14
drivers/crypto/qat/qat_c62x/adf_drv.c
··· 201 201 goto out_err_disable_aer; 202 202 } 203 203 204 - ret = hw_data->dev_config(accel_dev); 205 - if (ret) 206 - goto out_err_disable_aer; 207 - 208 - ret = adf_dev_init(accel_dev); 209 - if (ret) 210 - goto out_err_dev_shutdown; 211 - 212 - ret = adf_dev_start(accel_dev); 204 + ret = adf_dev_up(accel_dev, true); 213 205 if (ret) 214 206 goto out_err_dev_stop; 215 207 216 208 return ret; 217 209 218 210 out_err_dev_stop: 219 - adf_dev_stop(accel_dev); 220 - out_err_dev_shutdown: 221 - adf_dev_shutdown(accel_dev); 211 + adf_dev_down(accel_dev, false); 222 212 out_err_disable_aer: 223 213 adf_disable_aer(accel_dev); 224 214 out_err_free_reg: ··· 229 239 pr_err("QAT: Driver removal failed\n"); 230 240 return; 231 241 } 232 - adf_dev_stop(accel_dev); 233 - adf_dev_shutdown(accel_dev); 242 + adf_dev_down(accel_dev, false); 234 243 adf_disable_aer(accel_dev); 235 244 adf_cleanup_accel(accel_dev); 236 245 adf_cleanup_pci_dev(accel_dev);
+3 -10
drivers/crypto/qat/qat_c62xvf/adf_drv.c
··· 173 173 /* Completion for VF2PF request/response message exchange */ 174 174 init_completion(&accel_dev->vf.msg_received); 175 175 176 - ret = adf_dev_init(accel_dev); 177 - if (ret) 178 - goto out_err_dev_shutdown; 179 - 180 - ret = adf_dev_start(accel_dev); 176 + ret = adf_dev_up(accel_dev, false); 181 177 if (ret) 182 178 goto out_err_dev_stop; 183 179 184 180 return ret; 185 181 186 182 out_err_dev_stop: 187 - adf_dev_stop(accel_dev); 188 - out_err_dev_shutdown: 189 - adf_dev_shutdown(accel_dev); 183 + adf_dev_down(accel_dev, false); 190 184 out_err_free_reg: 191 185 pci_release_regions(accel_pci_dev->pci_dev); 192 186 out_err_disable: ··· 200 206 return; 201 207 } 202 208 adf_flush_vf_wq(accel_dev); 203 - adf_dev_stop(accel_dev); 204 - adf_dev_shutdown(accel_dev); 209 + adf_dev_down(accel_dev, false); 205 210 adf_cleanup_accel(accel_dev); 206 211 adf_cleanup_pci_dev(accel_dev); 207 212 kfree(accel_dev);
+9 -18
drivers/crypto/qat/qat_common/adf_ctl_drv.c
··· 244 244 if (!accel_dev->is_vf) 245 245 continue; 246 246 247 - adf_dev_stop(accel_dev); 248 - adf_dev_shutdown(accel_dev); 247 + adf_dev_down(accel_dev, false); 249 248 } 250 249 } 251 250 ··· 253 254 if (!adf_dev_started(accel_dev)) 254 255 continue; 255 256 256 - adf_dev_stop(accel_dev); 257 - adf_dev_shutdown(accel_dev); 257 + adf_dev_down(accel_dev, false); 258 258 } 259 259 } 260 260 } ··· 307 309 if (!accel_dev) 308 310 goto out; 309 311 310 - if (!adf_dev_started(accel_dev)) { 311 - dev_info(&GET_DEV(accel_dev), 312 - "Starting acceleration device qat_dev%d.\n", 313 - ctl_data->device_id); 314 - ret = adf_dev_init(accel_dev); 315 - if (!ret) 316 - ret = adf_dev_start(accel_dev); 317 - } else { 318 - dev_info(&GET_DEV(accel_dev), 319 - "Acceleration device qat_dev%d already started.\n", 320 - ctl_data->device_id); 321 - } 312 + dev_info(&GET_DEV(accel_dev), 313 + "Starting acceleration device qat_dev%d.\n", 314 + ctl_data->device_id); 315 + 316 + ret = adf_dev_up(accel_dev, false); 317 + 322 318 if (ret) { 323 319 dev_err(&GET_DEV(accel_dev), "Failed to start qat_dev%d\n", 324 320 ctl_data->device_id); 325 - adf_dev_stop(accel_dev); 326 - adf_dev_shutdown(accel_dev); 321 + adf_dev_down(accel_dev, false); 327 322 } 328 323 out: 329 324 kfree(ctl_data);
+2 -8
drivers/crypto/qat/qat_common/adf_sriov.c
··· 159 159 return -EBUSY; 160 160 } 161 161 162 - ret = adf_dev_shutdown_cache_cfg(accel_dev); 162 + ret = adf_dev_down(accel_dev, true); 163 163 if (ret) 164 164 return ret; 165 165 } ··· 184 184 if (!accel_dev->pf.vf_info) 185 185 return -ENOMEM; 186 186 187 - if (adf_dev_init(accel_dev)) { 188 - dev_err(&GET_DEV(accel_dev), "Failed to init qat_dev%d\n", 189 - accel_dev->accel_id); 190 - return -EFAULT; 191 - } 192 - 193 - if (adf_dev_start(accel_dev)) { 187 + if (adf_dev_up(accel_dev, false)) { 194 188 dev_err(&GET_DEV(accel_dev), "Failed to start qat_dev%d\n", 195 189 accel_dev->accel_id); 196 190 return -EFAULT;
+1 -2
drivers/crypto/qat/qat_common/adf_vf_isr.c
··· 71 71 struct adf_accel_dev *accel_dev = stop_data->accel_dev; 72 72 73 73 adf_dev_restarting_notify(accel_dev); 74 - adf_dev_stop(accel_dev); 75 - adf_dev_shutdown(accel_dev); 74 + adf_dev_down(accel_dev, false); 76 75 77 76 /* Re-enable PF2VF interrupts */ 78 77 adf_enable_pf2vf_interrupts(accel_dev);
+3 -14
drivers/crypto/qat/qat_dh895xcc/adf_drv.c
··· 201 201 goto out_err_disable_aer; 202 202 } 203 203 204 - ret = hw_data->dev_config(accel_dev); 205 - if (ret) 206 - goto out_err_disable_aer; 207 - 208 - ret = adf_dev_init(accel_dev); 209 - if (ret) 210 - goto out_err_dev_shutdown; 211 - 212 - ret = adf_dev_start(accel_dev); 204 + ret = adf_dev_up(accel_dev, true); 213 205 if (ret) 214 206 goto out_err_dev_stop; 215 207 216 208 return ret; 217 209 218 210 out_err_dev_stop: 219 - adf_dev_stop(accel_dev); 220 - out_err_dev_shutdown: 221 - adf_dev_shutdown(accel_dev); 211 + adf_dev_down(accel_dev, false); 222 212 out_err_disable_aer: 223 213 adf_disable_aer(accel_dev); 224 214 out_err_free_reg: ··· 229 239 pr_err("QAT: Driver removal failed\n"); 230 240 return; 231 241 } 232 - adf_dev_stop(accel_dev); 233 - adf_dev_shutdown(accel_dev); 242 + adf_dev_down(accel_dev, false); 234 243 adf_disable_aer(accel_dev); 235 244 adf_cleanup_accel(accel_dev); 236 245 adf_cleanup_pci_dev(accel_dev);
+3 -10
drivers/crypto/qat/qat_dh895xccvf/adf_drv.c
··· 173 173 /* Completion for VF2PF request/response message exchange */ 174 174 init_completion(&accel_dev->vf.msg_received); 175 175 176 - ret = adf_dev_init(accel_dev); 177 - if (ret) 178 - goto out_err_dev_shutdown; 179 - 180 - ret = adf_dev_start(accel_dev); 176 + ret = adf_dev_up(accel_dev, false); 181 177 if (ret) 182 178 goto out_err_dev_stop; 183 179 184 180 return ret; 185 181 186 182 out_err_dev_stop: 187 - adf_dev_stop(accel_dev); 188 - out_err_dev_shutdown: 189 - adf_dev_shutdown(accel_dev); 183 + adf_dev_down(accel_dev, false); 190 184 out_err_free_reg: 191 185 pci_release_regions(accel_pci_dev->pci_dev); 192 186 out_err_disable: ··· 200 206 return; 201 207 } 202 208 adf_flush_vf_wq(accel_dev); 203 - adf_dev_stop(accel_dev); 204 - adf_dev_shutdown(accel_dev); 209 + adf_dev_down(accel_dev, false); 205 210 adf_cleanup_accel(accel_dev); 206 211 adf_cleanup_pci_dev(accel_dev); 207 212 kfree(accel_dev);