Re: [PATCH 05/11] eventpoll: add ep_poll_queue() loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/7/25 5:28 AM, Pavel Begunkov wrote:
> On 2/4/25 19:46, Jens Axboe wrote:
>> If a wait_queue_entry is passed in to epoll_wait(), then utilize this
>> new helper for reaping events and/or adding to the epoll waitqueue
>> rather than calling the potentially sleeping ep_poll(). It works like
>> ep_poll(), except it doesn't block - it either returns the events that
>> are already available, or it adds the specified entry to the struct
>> eventpoll waitqueue to get a callback when events are triggered. It
>> returns -EIOCBQUEUED for that case.
>>
>> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
>> ---
>>   fs/eventpoll.c | 37 ++++++++++++++++++++++++++++++++++++-
>>   1 file changed, 36 insertions(+), 1 deletion(-)
>>
>> diff --git a/fs/eventpoll.c b/fs/eventpoll.c
>> index ecaa5591f4be..a8be0c7110e4 100644
>> --- a/fs/eventpoll.c
>> +++ b/fs/eventpoll.c
>> @@ -2032,6 +2032,39 @@ static int ep_try_send_events(struct eventpoll *ep,
>>       return res;
>>   }
>>   +static int ep_poll_queue(struct eventpoll *ep,
>> +             struct epoll_event __user *events, int maxevents,
>> +             struct wait_queue_entry *wait)
>> +{
>> +    int res, eavail;
>> +
>> +    /* See ep_poll() for commentary */
>> +    eavail = ep_events_available(ep);
>> +    while (1) {
>> +        if (eavail) {
>> +            res = ep_try_send_events(ep, events, maxevents);
>> +            if (res)
>> +                return res;
>> +        }
>> +
>> +        eavail = ep_busy_loop(ep, true);
> 
> I have doubts we want to busy loop here even if it's just one iteration /
> nonblockinf. And there is already napi polling support in io_uring done
> from the right for io_uring users spot.

Yeah I did ponder that which is why it's passing in the timed_out == true
to just do a single loop. We could certainly get rid of that.

-- 
Jens Axboe





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux