On 6/24/19 2:28 PM, Hook, Gary wrote: > Provide the ability to constrain the total number of enabled devices in > the system. Once maxdev devices have been configured, additional > devices are ignored. > > Signed-off-by: Gary R Hook <gary.hook@xxxxxxx> > --- > drivers/crypto/ccp/sp-pci.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/crypto/ccp/sp-pci.c b/drivers/crypto/ccp/sp-pci.c > index c167c4671f45..b81493810689 100644 > --- a/drivers/crypto/ccp/sp-pci.c > +++ b/drivers/crypto/ccp/sp-pci.c > @@ -36,6 +36,13 @@ > /* > * Limit CCP use to a specifed number of queues per device. > */ > + > +static struct mutex devcount_mutex ____cacheline_aligned; I don't think I'd worry about the cache alignment since this is only used at module load. > +static unsigned int devcount = 0; > +static unsigned int maxdev = 0; > +module_param(maxdev, uint, 0444); > +MODULE_PARM_DESC(maxdev, "Total number of devices to register"); > + > static unsigned int nqueues = MAX_HW_QUEUES; > module_param(nqueues, uint, 0444); > MODULE_PARM_DESC(nqueues, "Number of queues per CCP (default: 5)"); > @@ -193,6 +200,9 @@ static int sp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > int bar_mask; > int ret; > > + if (maxdev && (devcount >= maxdev)) /* Too many devices? */ > + return 0; > + You need the mutex to protect the use of devcount. You could use an atomic instead of the int/mutex combination. And this will mess with the PSP support. It should be in the CCP specific files, not here. > ret = -ENOMEM; > sp = sp_alloc_struct(dev); > if (!sp) > @@ -261,6 +271,11 @@ static int sp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > if (ret) > goto e_err; > > + /* Increase count of devices */ > + mutex_lock(&devcount_mutex); > + devcount++; > + mutex_unlock(&devcount_mutex); > + > return 0; > > e_err: > @@ -374,6 +389,7 @@ static struct pci_driver sp_pci_driver = { > > int sp_pci_init(void) > { > + mutex_init(&devcount_mutex); Tab instead of spaces. Thanks, Tom > return pci_register_driver(&sp_pci_driver); > } > >