Previously the next card number was assigned from a static int local variable, which was read and later incremented. This was not thread- safe, so now we use an atomic_t and atomic_fetch_add instead. Updated TODO. Signed-off-by: Jeremy Sowden <jeremy@xxxxxxxxxx> --- drivers/staging/kpc2000/TODO | 1 - drivers/staging/kpc2000/kpc2000/core.c | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/staging/kpc2000/TODO b/drivers/staging/kpc2000/TODO index 669fe5bf9637..47530e23e940 100644 --- a/drivers/staging/kpc2000/TODO +++ b/drivers/staging/kpc2000/TODO @@ -1,6 +1,5 @@ - the kpc_spi driver doesn't seem to let multiple transactions (to different instances of the core) happen in parallel... - The kpc_i2c driver is a hot mess, it should probably be cleaned up a ton. It functions against current hardware though. -- pcard->card_num in kp2000_pcie_probe() is a global variable and needs atomic / locking / something better. - would be nice if the AIO fileops in kpc_dma could be made to work - probably want to add a CONFIG_ option to control compilation of the AIO functions - if the AIO fileops in kpc_dma start working, next would be making iov_count > 1 work too diff --git a/drivers/staging/kpc2000/kpc2000/core.c b/drivers/staging/kpc2000/kpc2000/core.c index eb8bac62d33d..72130a50afd6 100644 --- a/drivers/staging/kpc2000/kpc2000/core.c +++ b/drivers/staging/kpc2000/kpc2000/core.c @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-2.0+ +#include <linux/atomic.h> #include <linux/init.h> #include <linux/module.h> #include <linux/pci.h> @@ -19,6 +20,8 @@ #include "pcie.h" +static atomic_t next_card_num = ATOMIC_INIT(1); + /******************************************************* * SysFS Attributes ******************************************************/ @@ -202,7 +205,6 @@ int kp2000_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int err = 0; struct kp2000_device *pcard; - static int card_count = 1; int rv; unsigned long reg_bar_phys_addr; unsigned long reg_bar_phys_len; @@ -222,8 +224,7 @@ int kp2000_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) //} //{ Step 2: Initialize trivial pcard elements - pcard->card_num = card_count; - card_count++; + pcard->card_num = atomic_fetch_add(1, &next_card_num); scnprintf(pcard->name, 16, "kpcard%d", pcard->card_num); mutex_init(&pcard->sem); -- 2.20.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel