crypto: ccp - Check for CCP before registering crypto algs
If the ccp is built as a built-in module, then ccp-crypto (whether built as a module or a built-in module) will be able to load and it will register its crypto algorithms. If the system does not have a CCP this will result in -ENODEV being returned whenever a command is attempted to be queued by the registered crypto algorithms. Add an API, ccp_present(), that checks for the presence of a CCP on the system. The ccp-crypto module can use this to determine if it should register it's crypto alogorithms. Cc: stable@vger.kernel.org Reported-by: Scot Doyle <lkml14@scotdoyle.com> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Tested-by: Scot Doyle <lkml14@scotdoyle.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
413e55742a
commit
c9f21cb638
|
@ -367,6 +367,10 @@ static int ccp_crypto_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = ccp_present();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
spin_lock_init(&req_queue_lock);
|
spin_lock_init(&req_queue_lock);
|
||||||
INIT_LIST_HEAD(&req_queue.cmds);
|
INIT_LIST_HEAD(&req_queue.cmds);
|
||||||
req_queue.backlog = &req_queue.cmds;
|
req_queue.backlog = &req_queue.cmds;
|
||||||
|
|
|
@ -54,6 +54,20 @@ static inline void ccp_del_device(struct ccp_device *ccp)
|
||||||
ccp_dev = NULL;
|
ccp_dev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ccp_present - check if a CCP device is present
|
||||||
|
*
|
||||||
|
* Returns zero if a CCP device is present, -ENODEV otherwise.
|
||||||
|
*/
|
||||||
|
int ccp_present(void)
|
||||||
|
{
|
||||||
|
if (ccp_get_device())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ccp_present);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccp_enqueue_cmd - queue an operation for processing by the CCP
|
* ccp_enqueue_cmd - queue an operation for processing by the CCP
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,13 @@ struct ccp_cmd;
|
||||||
#if defined(CONFIG_CRYPTO_DEV_CCP_DD) || \
|
#if defined(CONFIG_CRYPTO_DEV_CCP_DD) || \
|
||||||
defined(CONFIG_CRYPTO_DEV_CCP_DD_MODULE)
|
defined(CONFIG_CRYPTO_DEV_CCP_DD_MODULE)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ccp_present - check if a CCP device is present
|
||||||
|
*
|
||||||
|
* Returns zero if a CCP device is present, -ENODEV otherwise.
|
||||||
|
*/
|
||||||
|
int ccp_present(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccp_enqueue_cmd - queue an operation for processing by the CCP
|
* ccp_enqueue_cmd - queue an operation for processing by the CCP
|
||||||
*
|
*
|
||||||
|
@ -53,6 +60,11 @@ int ccp_enqueue_cmd(struct ccp_cmd *cmd);
|
||||||
|
|
||||||
#else /* CONFIG_CRYPTO_DEV_CCP_DD is not enabled */
|
#else /* CONFIG_CRYPTO_DEV_CCP_DD is not enabled */
|
||||||
|
|
||||||
|
static inline int ccp_present(void)
|
||||||
|
{
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int ccp_enqueue_cmd(struct ccp_cmd *cmd)
|
static inline int ccp_enqueue_cmd(struct ccp_cmd *cmd)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
Loading…
Reference in a new issue