From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 03 Jan 2024 09:43:39 +0000 Subject: [PATCH] update kernel to 5.10.198 --- kernel/drivers/dma/iop-adma.c | 53 +++++++++++++++++++++-------------------------------- 1 files changed, 21 insertions(+), 32 deletions(-) diff --git a/kernel/drivers/dma/iop-adma.c b/kernel/drivers/dma/iop-adma.c index 012584c..310b899 100644 --- a/kernel/drivers/dma/iop-adma.c +++ b/kernel/drivers/dma/iop-adma.c @@ -1,16 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * offload engine driver for the Intel Xscale series of i/o processors * Copyright © 2006, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * */ /* @@ -25,13 +16,13 @@ #include <linux/spinlock.h> #include <linux/interrupt.h> #include <linux/platform_device.h> +#include <linux/prefetch.h> #include <linux/memory.h> #include <linux/ioport.h> #include <linux/raid/pq.h> #include <linux/slab.h> -#include <mach/adma.h> - +#include "iop-adma.h" #include "dmaengine.h" #define to_iop_adma_chan(chan) container_of(chan, struct iop_adma_chan, common) @@ -125,9 +116,9 @@ list_for_each_entry_safe(iter, _iter, &iop_chan->chain, chain_node) { pr_debug("\tcookie: %d slot: %d busy: %d " - "this_desc: %#x next_desc: %#llx ack: %d\n", + "this_desc: %pad next_desc: %#llx ack: %d\n", iter->async_tx.cookie, iter->idx, busy, - iter->async_tx.phys, (u64)iop_desc_get_next_desc(iter), + &iter->async_tx.phys, (u64)iop_desc_get_next_desc(iter), async_tx_test_ack(&iter->async_tx)); prefetch(_iter); prefetch(&_iter->async_tx); @@ -182,7 +173,7 @@ &iop_chan->chain, chain_node) { zero_sum_result |= iop_desc_get_zero_result(grp_iter); - pr_debug("\titer%d result: %d\n", + pr_debug("\titer%d result: %d\n", grp_iter->idx, zero_sum_result); slot_cnt -= slots_per_op; if (slot_cnt == 0) @@ -247,9 +238,10 @@ spin_unlock_bh(&iop_chan->lock); } -static void iop_adma_tasklet(unsigned long data) +static void iop_adma_tasklet(struct tasklet_struct *t) { - struct iop_adma_chan *iop_chan = (struct iop_adma_chan *) data; + struct iop_adma_chan *iop_chan = from_tasklet(iop_chan, t, + irq_tasklet); /* lockdep will flag depedency submissions as potentially * recursive locking, this is not the case as a dependency @@ -373,13 +365,11 @@ struct iop_adma_chan *iop_chan = to_iop_adma_chan(tx->chan); struct iop_adma_desc_slot *grp_start, *old_chain_tail; int slot_cnt; - int slots_per_op; dma_cookie_t cookie; dma_addr_t next_dma; grp_start = sw_desc->group_head; slot_cnt = grp_start->slot_cnt; - slots_per_op = grp_start->slots_per_op; spin_lock_bh(&iop_chan->lock); cookie = dma_cookie_assign(tx); @@ -417,8 +407,7 @@ /** * iop_adma_alloc_chan_resources - returns the number of allocated descriptors - * @chan - allocate descriptor resources for this channel - * @client - current client requesting the channel be ready for requests + * @chan: allocate descriptor resources for this channel * * Note: We keep the slots for 1 operation on iop_chan->chain at all times. To * avoid deadlock, via async_xor, num_descs_in_pool must at a minimum be @@ -428,6 +417,7 @@ static int iop_adma_alloc_chan_resources(struct dma_chan *chan) { char *hw_desc; + dma_addr_t dma_desc; int idx; struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); struct iop_adma_desc_slot *slot = NULL; @@ -456,9 +446,8 @@ INIT_LIST_HEAD(&slot->tx_list); INIT_LIST_HEAD(&slot->chain_node); INIT_LIST_HEAD(&slot->slot_node); - hw_desc = (char *) iop_chan->device->dma_desc_pool; - slot->async_tx.phys = - (dma_addr_t) &hw_desc[idx * IOP_ADMA_SLOT_SIZE]; + dma_desc = iop_chan->device->dma_desc_pool; + slot->async_tx.phys = dma_desc + idx * IOP_ADMA_SLOT_SIZE; slot->idx = idx; spin_lock_bh(&iop_chan->lock); @@ -1308,9 +1297,8 @@ goto err_free_adev; } - dev_dbg(&pdev->dev, "%s: allocated descriptor pool virt %p phys %p\n", - __func__, adev->dma_desc_pool_virt, - (void *) adev->dma_desc_pool); + dev_dbg(&pdev->dev, "%s: allocated descriptor pool virt %p phys %pad\n", + __func__, adev->dma_desc_pool_virt, &adev->dma_desc_pool); adev->id = plat_data->hw_id; @@ -1363,16 +1351,17 @@ ret = -ENOMEM; goto err_free_iop_chan; } - tasklet_init(&iop_chan->irq_tasklet, iop_adma_tasklet, (unsigned long) - iop_chan); + tasklet_setup(&iop_chan->irq_tasklet, iop_adma_tasklet); /* clear errors before enabling interrupts */ iop_adma_device_clear_err_status(iop_chan); for (i = 0; i < 3; i++) { - irq_handler_t handler[] = { iop_adma_eot_handler, - iop_adma_eoc_handler, - iop_adma_err_handler }; + static const irq_handler_t handler[] = { + iop_adma_eot_handler, + iop_adma_eoc_handler, + iop_adma_err_handler + }; int irq = platform_get_irq(pdev, i); if (irq < 0) { ret = -ENXIO; -- Gitblit v1.6.2