On 9/1/2026 15:17, Gang Ba wrote:
I'm not sure that we want to do this. Once a process faults there is
no recovery path for its queues. If we restore them then other waves
may cause further faults, leading us back here.
Similarly, if the workqueue contains pipelined fault interrupts we
don't want to do this multiple times. Perhaps check pdd->qpd.evicted
before evicting queues and only run the workaround if (evicted == 0).
The eviction and restoration functions feature built-in concurrency
protection. If an eviction process is already underway, the function
automatically bypasses the operation.
The function utilizes the "evicted" value (which can be updated to
|pdd->qpd.evicted <= 1|) to prevent multiple concurrent executions of
the cleaner function.
I don't think this addresses my comment above. We do not want to restore
the process after evicting it. The sequence I'd propose is:
- On the first fault within a process only (discarding all subsequent
faults):
- Evict queues, if not already evicted
- Run cleaner
- Leave queues evicted