int ret = 0;
int n = max(sif_ki_spqp_size, 0U);
int bm_len = max(1, n/8);
+ struct sif_pqp_info *pqi = &sdev->pqi;
- mutex_init(&sdev->pqi.ki_s.lock);
- sdev->pqi.ki_s.spqp =
+ mutex_init(&pqi->ki_s.lock);
+ pqi->ki_s.spqp =
#ifdef CONFIG_NUMA
kmalloc_node(sizeof(struct sif_st_pqp *) * n, GFP_KERNEL | __GFP_ZERO,
sdev->pdev->dev.numa_node);
#else
kmalloc(sizeof(struct sif_st_pqp *) * n, GFP_KERNEL | __GFP_ZERO);
#endif
- if (!sdev->pqi.ki_s.spqp)
+ if (!pqi->ki_s.spqp)
return -ENOMEM;
- sdev->pqi.ki_s.bitmap =
+ pqi->ki_s.bitmap =
#ifdef CONFIG_NUMA
kmalloc_node(sizeof(ulong) * bm_len, GFP_KERNEL | __GFP_ZERO,
sdev->pdev->dev.numa_node);
#else
kmalloc(sizeof(ulong) * bm_len, GFP_KERNEL | __GFP_ZERO);
#endif
- if (!sdev->pqi.ki_s.bitmap) {
+ if (!pqi->ki_s.bitmap) {
ret = -ENOMEM;
goto bm_failed;
}
ret = PTR_ERR(spqp);
break;
}
- sdev->pqi.ki_s.spqp[i] = spqp;
+ pqi->ki_s.spqp[i] = spqp;
spqp->index = i;
}
- sdev->pqi.ki_s.pool_sz = i;
+ pqi->ki_s.pool_sz = i;
if (ret && i) {
sif_log(sdev, SIF_INFO, "Failed to create %d INVALIDATE_KEY stencil QPs", i);
sif_ki_spqp_fini(sdev);
sif_log(sdev, SIF_INIT, "Created %d INVALIDATE_KEY stencil QPs", i);
bm_failed:
if (ret)
- kfree(sdev->pqi.ki_s.spqp);
+ kfree(pqi->ki_s.spqp);
return 0; /* Never fail on stencil PQP allocation */
}
static void sif_ki_spqp_fini(struct sif_dev *sdev)
{
+ struct sif_pqp_info *pqi = &sdev->pqi;
int i;
- if (!sdev->pqi.ki_s.spqp)
+ if (!pqi->ki_s.spqp)
return;
- for (i = sdev->pqi.ki_s.pool_sz - 1; i >= 0; i--)
- sif_destroy_st_pqp(sdev, sdev->pqi.ki_s.spqp[i]);
- kfree(sdev->pqi.ki_s.bitmap);
- kfree(sdev->pqi.ki_s.spqp);
- sdev->pqi.ki_s.spqp = NULL;
+ for (i = pqi->ki_s.pool_sz - 1; i >= 0; i--)
+ sif_destroy_st_pqp(sdev, pqi->ki_s.spqp[i]);
+ kfree(pqi->ki_s.bitmap);
+ kfree(pqi->ki_s.spqp);
+ pqi->ki_s.spqp = NULL;
}
int sif_pqp_init(struct sif_dev *sdev)
{
struct sif_pqp *pqp;
+ struct sif_pqp_info *pqi = &sdev->pqi;
struct sif_eps *es = &sdev->es[sdev->mbox_epsc];
int i;
int ret = 0;
uint n_pqps = es->eqs.cnt - 2;
- sdev->pqi.pqp = sif_kmalloc(sdev, sizeof(struct sif_pqp *) * n_pqps, GFP_KERNEL | __GFP_ZERO);
- if (!sdev->pqi.pqp)
+ pqi->pqp = sif_kmalloc(sdev, sizeof(struct sif_pqp *) * n_pqps, GFP_KERNEL | __GFP_ZERO);
+ if (!pqi->pqp)
return -ENOMEM;
for (i = 0; i < n_pqps; i++) {
ret = PTR_ERR(pqp);
goto failed;
}
- sdev->pqi.pqp[i] = pqp;
+ pqi->pqp[i] = pqp;
}
- sdev->pqi.cnt = i;
- atomic_set(&sdev->pqi.next, 0);
+ pqi->cnt = i;
+ atomic_set(&pqi->next, 0);
ret = sif_ki_spqp_init(sdev);
if (ret)
return 0;
failed:
- sdev->pqi.cnt = i;
+ pqi->cnt = i;
sif_pqp_fini(sdev);
return ret;
}
void sif_pqp_fini(struct sif_dev *sdev)
{
+ struct sif_pqp_info *pqi = &sdev->pqi;
+
sif_ki_spqp_fini(sdev);
/* we must maintain a consistent state of the PQP array
* during takedown as these operations themselves
* generate PQP requests..
*/
- while (sdev->pqi.cnt > 0) {
- int i = sdev->pqi.cnt - 1;
- struct sif_pqp *pqp = sdev->pqi.pqp[i];
+ while (pqi->cnt > 0) {
+ int i = pqi->cnt - 1;
+ struct sif_pqp *pqp = pqi->pqp[i];
if (i > 0) {
/* Remove ourselves first, except the final PQP */
- sdev->pqi.pqp[i] = NULL;
- sdev->pqi.cnt--;
+ pqi->pqp[i] = NULL;
+ pqi->cnt--;
}
sif_destroy_pqp(sdev, pqp);
if (i == 0)
- sdev->pqi.cnt--;
+ pqi->cnt--;
}
- kfree(sdev->pqi.pqp);
- sdev->pqi.pqp = NULL;
+ kfree(pqi->pqp);
+ pqi->pqp = NULL;
}