[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZCJEAx/G0x6zokPF@infradead.org>
Date: Tue, 28 Mar 2023 10:33:55 +0900
From: Christoph Hellwig <hch@...radead.org>
To: Michael Kelley <mikelley@...rosoft.com>
Cc: hch@....de, m.szyprowski@...sung.com, robin.murphy@....com,
decui@...rosoft.com, tiala@...rosoft.com, iommu@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 1/1] swiotlb: Track and report io_tlb_used high water
mark in debugfs
On Sat, Mar 25, 2023 at 10:53:10AM -0700, Michael Kelley wrote:
> @@ -659,6 +663,14 @@ static int swiotlb_do_find_slots(struct device *dev, int area_index,
> area->index = wrap_area_index(mem, index + nslots);
> area->used += nslots;
> spin_unlock_irqrestore(&area->lock, flags);
> +
> + new_used = atomic_long_add_return(nslots, &total_used);
> + old_hiwater = atomic_long_read(&used_hiwater);
> + do {
> + if (new_used <= old_hiwater)
> + break;
> + } while (!atomic_long_try_cmpxchg(&used_hiwater, &old_hiwater, new_used));
> +
> return slot_index;
Hmm, so we're right in the swiotlb hot path here and add two new global
atomics?
> static int io_tlb_used_get(void *data, u64 *val)
> {
> - *val = mem_used(&io_tlb_default_mem);
> + *val = (u64)atomic_long_read(&total_used);
> return 0;
> }
> +
> +static int io_tlb_hiwater_get(void *data, u64 *val)
> +{
> + *val = (u64)atomic_long_read(&used_hiwater);
I can't see how these casts would be needed.
Powered by blists - more mailing lists