Re: [PATCH v2 1/1] swiotlb: Track and report io_tlb_used high water mark in debugfs

From: Christoph Hellwig
Date: Mon Mar 27 2023 - 21:34:09 EST


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.