Commit 08910ae
committed
Implement poll to make select work correctly
Using ftrace, I observed that during the select system call,
the kernel invokes do_select → select_poll_one → vfs_poll
→ file->f_op->poll. However, the kxo device did not
implement the poll file operation.
In this case, vfs_poll returns a default mask that causes
select to assume the file is always ready for I/O,
even if a subsequent read would block.
This behavior led to user-facing issues in xo-user.
For example, attempting to pause (Ctrl+P) or
stop (Ctrl+Q) could be delayed or ignored due to
the blocking nature of kxo's read when no data is available.
I implemented poll support using a wait queue to resolve
this problem.1 parent 04978e7 commit 08910ae
1 file changed
+14
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
380 | 381 | | |
381 | 382 | | |
382 | 383 | | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
383 | 396 | | |
384 | 397 | | |
385 | 398 | | |
| |||
449 | 462 | | |
450 | 463 | | |
451 | 464 | | |
452 | | - | |
| 465 | + | |
453 | 466 | | |
454 | 467 | | |
455 | 468 | | |
| |||
0 commit comments