From dadb8d7762099687e86c8e107196ebc9195a845b Mon Sep 17 00:00:00 2001 From: DAEYEONG LEE Date: Thu, 8 May 2025 18:07:24 +0900 Subject: [PATCH 1/3] driver: mx_dma: Fix missing transfer_id_free Signed-off-by: DAEYEONG LEE --- transfer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/transfer.c b/transfer.c index 5a24f8e..def6870 100644 --- a/transfer.c +++ b/transfer.c @@ -235,7 +235,7 @@ static int mx_command_init_common(struct mx_transfer *transfer, int opcode) id = transfer_id_alloc(transfer); if (id < 0) { - pr_warn("Failed to trasfer_id_alloc\n"); + pr_warn("Failed to trasfer_id_alloc (err=%d)\n", id); return -ENOMEM; } @@ -342,9 +342,12 @@ static int mx_transfer_init_ctrl(struct mx_transfer *transfer, int opcode) static int mx_transfer_destroy_ctrl(struct mx_transfer *transfer) { + struct mx_command *comm = &transfer->cmd; uint64_t value; int ret; + transfer_id_free(comm->id); + if (transfer->dir != DMA_FROM_DEVICE) return 0; From afe26eb39f07aa5f12ea53867445ed656911e7d7 Mon Sep 17 00:00:00 2001 From: DAEYEONG LEE Date: Thu, 8 May 2025 18:07:58 +0900 Subject: [PATCH 2/3] driver: mx_dma: Code clean up Signed-off-by: DAEYEONG LEE --- init.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/init.c b/init.c index fd62bd0..c85584c 100644 --- a/init.c +++ b/init.c @@ -17,26 +17,26 @@ static void mx_event_init(struct mx_pci_dev *mx_pdev) static irqreturn_t msi_irq_handler(int irq, void *data) { - struct mx_pci_dev *mx_pdev; - struct mx_event *mx_event; + struct mx_pci_dev *mx_pdev; + struct mx_event *mx_event; - mx_pdev = (struct mx_pci_dev *)data; - if (mx_pdev == NULL) { - pr_err("Invalid data\n"); - goto out; - } + mx_pdev = (struct mx_pci_dev *)data; + if (mx_pdev == NULL) { + pr_err("Invalid data\n"); + goto out; + } - mx_event = &(mx_pdev->event); - if (mx_event == NULL) { - pr_err("Invalid event\n"); - goto out; - } + mx_event = &(mx_pdev->event); + if (mx_event == NULL) { + pr_err("Invalid event\n"); + goto out; + } - atomic_set(&mx_event->flag, 1); - wake_up_interruptible(&mx_event->wq); + atomic_inc(&mx_event->count); + wake_up_interruptible(&mx_event->wq); out: - return IRQ_HANDLED; + return IRQ_HANDLED; } static void pci_device_exit(struct mx_pci_dev *mx_pdev, struct pci_dev *pdev) @@ -390,7 +390,7 @@ int mxdma_driver_probe(struct pci_dev *pdev, const struct pci_device_id *id, int } pr_info("pci device is probed (vendor=%#x device=%#x bdf=%s cxl=mem%d)\n", - pdev->vendor, pdev->device, dev_name(&pdev->dev), cxl_memdev_id); + pdev->vendor, pdev->device, dev_name(&pdev->dev), cxl_memdev_id); return 0; } From de0c44a48323bde0e816ce85111329361b4fd33e Mon Sep 17 00:00:00 2001 From: DAEYEONG LEE Date: Thu, 8 May 2025 18:08:33 +0900 Subject: [PATCH 3/3] driver: mx_dma: Modify to incread/decrease atomic poll count Signed-off-by: DAEYEONG LEE --- fops.c | 8 ++++---- init.c | 2 +- mx_dma.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fops.c b/fops.c index 11eb6e4..340230a 100644 --- a/fops.c +++ b/fops.c @@ -240,7 +240,7 @@ static unsigned int mxdma_device_poll(struct file *file, poll_table *wait) struct mx_pci_dev *mx_pdev; struct mx_event *mx_event; unsigned int mask = 0; - int flag; + int count; mx_cdev = (struct mx_char_dev *)file->private_data; if (!mx_cdev) { @@ -271,11 +271,11 @@ static unsigned int mxdma_device_poll(struct file *file, poll_table *wait) mx_event = &mx_pdev->event; poll_wait(file, &mx_event->wq, wait); - flag = atomic_read(&mx_event->flag); - if (flag) { + count = atomic_read(&mx_event->count); + if (count > 0) { + atomic_dec(&mx_event->count); mask = POLLIN | POLLRDNORM; } - atomic_set(&mx_event->flag, 0); return mask; } diff --git a/init.c b/init.c index c85584c..b203b7d 100644 --- a/init.c +++ b/init.c @@ -12,7 +12,7 @@ static void mx_event_init(struct mx_pci_dev *mx_pdev) struct mx_event *mx_event = &mx_pdev->event; init_waitqueue_head(&mx_event->wq); - atomic_set(&mx_event->flag, 0); + atomic_set(&mx_event->count, 0); } static irqreturn_t msi_irq_handler(int irq, void *data) diff --git a/mx_dma.h b/mx_dma.h index e38e643..ca9ba24 100644 --- a/mx_dma.h +++ b/mx_dma.h @@ -182,7 +182,7 @@ struct mx_char_dev { }; struct mx_event { - atomic_t flag; + atomic_t count; wait_queue_head_t wq; };