mirror of
https://github.com/torvalds/linux.git
synced 2026-09-30 23:44:02 +02:00
dma_alloc_attrs() passes *dma_handle to trace_dma_alloc() without checking whether the allocation succeeded. No backend writes it on failure: dma_direct_alloc(), iommu_dma_alloc() and the dma_map_ops instances assign it only on the path that returns a buffer. Callers usually pass an uninitialized automatic variable, so a failed allocation records whatever the stack held, next to the virt_addr=(null) that marks the record as an error: dma_alloc: dmatrace dir=BIDIRECTIONAL dma_addr=deadbeefdeadbeef size=1099511627776 virt_addr=0000000000000000 The device coherent pool path reaches the same call: a non-zero return from dma_alloc_from_dev_coherent() means the request was handled, not that it succeeded, so cpu_addr is NULL and dma_handle is untouched once the pool runs out. For an allocation event a NULL virt_addr already means the request failed, so the address field carries nothing. Report 0 for it in the event class rather than at each call site, which covers dma_alloc_pages() and dma_alloc_sgt_err() as well. Fixes: |
||
|---|---|---|
| .. | ||
| events | ||
| misc | ||
| stages | ||
| bpf_probe.h | ||
| define_custom_trace.h | ||
| define_remote_events.h | ||
| define_trace.h | ||
| perf.h | ||
| syscall.h | ||
| trace_custom_events.h | ||
| trace_events.h | ||