Messages in this thread | | | Subject | Re: WARNING in __mmdrop | From | Jason Wang <> | Date | Mon, 29 Jul 2019 13:54:49 +0800 |
| |
On 2019/7/26 下午9:49, Michael S. Tsirkin wrote: >>> Ok, let me retry if necessary (but I do remember I end up with deadlocks >>> last try). >> Ok, I play a little with this. And it works so far. Will do more testing >> tomorrow. >> >> One reason could be I switch to use get_user_pages_fast() to >> __get_user_pages_fast() which doesn't need mmap_sem. >> >> Thanks > OK that sounds good. If we also set a flag to make > vhost_exceeds_weight exit, then I think it will be all good.
After some experiments, I came up two methods:
1) switch to use vq->mutex, then we must take the vq lock during range checking (but I don't see obvious slowdown for 16vcpus + 16queues). Setting flags during weight check should work but it still can't address the worst case: wait for the page to be swapped in. Is this acceptable?
2) using current RCU but replace synchronize_rcu() with vhost_work_flush(). The worst case is the same as 1) but we can check range without holding any locks.
Which one did you prefer?
Thanks
| |