Messages in this thread | | | Date | Tue, 28 Mar 2023 10:33:55 +0900 | From | Christoph Hellwig <> | 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.
| |