Hi, > From: Yoshihiro Shimoda, Sent: Monday, March 14, 2022 6:11 PM > > From: Gilad Ben-Yossef, Sent: Sunday, March 13, 2022 11:52 PM > > On Fri, Mar 11, 2022 at 10:19 AM Yoshihiro Shimoda <snip> > > Having said that, adding a lock here is not the best solution. To be > > effective, the lock should be taken before the call to > > cc_queues_status() and released only after the updating of the free > > slots. > > However, while doing so will ensure there is no race condition with > > regard to writing to the hardware control registers, it does not deal > > at all with the case the hardware command FIFO is full due to > > encryption/decryption requests. > > This is by design, as the whole purpose of a seperate init time only > > send_request variant is to avoid these complexities, under the > > assumption that all access to the hardware is serialised at init time. > > > > Therefore, a better solution is to switch the order of algo > > allocations so that the hash is allocated first, prior to any other > > alg that might be using the hardware FIFO and thus guaranteeing > > synchronized access and available FIFO space. > > > > Can you please verify that the following patch indeed resolves the > > issue for you? > > Yes, we will verify that. Please wait a while. > > > diff --git a/drivers/crypto/ccree/cc_driver.c b/drivers/crypto/ccree/cc_driver.c > > index 790fa9058a36..7d1bee86d581 100644 > > --- a/drivers/crypto/ccree/cc_driver.c > > +++ b/drivers/crypto/ccree/cc_driver.c > > @@ -529,24 +529,26 @@ static int init_cc_resources(struct > > platform_device *plat_dev) > > goto post_req_mgr_err; > > } > > > > - /* Allocate crypto algs */ > > - rc = cc_cipher_alloc(new_drvdata); > > + /* hash must be allocated first due to use of send_request_init() > > + * and dependency of AEAD on it > > + */ > > + rc = cc_hash_alloc(new_drvdata); > > if (rc) { > > - dev_err(dev, "cc_cipher_alloc failed\n"); > > + dev_err(dev, "cc_hash_alloc failed\n"); > > goto post_buf_mgr_err; > > } > > > > - /* hash must be allocated before aead since hash exports APIs */ > > - rc = cc_hash_alloc(new_drvdata); > > + /* Allocate crypto algs */ > > + rc = cc_cipher_alloc(new_drvdata); > > if (rc) { > > - dev_err(dev, "cc_hash_alloc failed\n"); > > - goto post_cipher_err; > > + dev_err(dev, "cc_cipher_alloc failed\n"); > > + goto post_hash_err; > > } > > > > rc = cc_aead_alloc(new_drvdata); > > if (rc) { > > dev_err(dev, "cc_aead_alloc failed\n"); > > - goto post_hash_err; > > + goto post_cipher_err; > > } > > > > /* If we got here and FIPS mode is enabled > > @@ -558,10 +560,10 @@ static int init_cc_resources(struct > > platform_device *plat_dev) > > pm_runtime_put(dev); > > return 0; > > > > -post_hash_err: > > - cc_hash_free(new_drvdata); > > post_cipher_err: > > cc_cipher_free(new_drvdata); > > +post_hash_err: > > + cc_hash_free(new_drvdata); > > post_buf_mgr_err: > > cc_buffer_mgr_fini(new_drvdata); > > post_req_mgr_err: > > @@ -593,8 +595,8 @@ static void cleanup_cc_resources(struct > > platform_device *plat_dev) > > (struct cc_drvdata *)platform_get_drvdata(plat_dev); > > > > > > Thanks again! > > Gilad My colleagues tested your patch, and then this patch also resolved this issue. So, Tested-by: Jing Dan <jing.dan.nx@xxxxxxxxxxx> Tested-by: Dung Nguyen <dung.nguyen.zy@xxxxxxxxxxx> Thank you very much for your support! Best regards, Yoshihiro Shimoda > > -- > > Gilad Ben-Yossef > > Chief Coffee Drinker > > > > values of β will give rise to dom!