drm: make drm_file use keyed wakeups
Some processes, such as systemd, are only polling for EPOLLERR|EPOLLHUP. As drm_file uses unkeyed wakeups, such a poll receives many spurious wakeups from uninteresting events. Use keyed wakeups to allow the wakeup target to more efficiently discard these uninteresting events. Signed-off-by: Kenny Levinsen <kl@kl.wtf> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20200424145103.3048-1-kl@kl.wtf
This commit is contained in:
		
							parent
							
								
									d839494924
								
							
						
					
					
						commit
						87189b7895
					
				| @ -613,7 +613,8 @@ put_back_event: | ||||
| 				file_priv->event_space -= length; | ||||
| 				list_add(&e->link, &file_priv->event_list); | ||||
| 				spin_unlock_irq(&dev->event_lock); | ||||
| 				wake_up_interruptible(&file_priv->event_wait); | ||||
| 				wake_up_interruptible_poll(&file_priv->event_wait, | ||||
| 					EPOLLIN | EPOLLRDNORM); | ||||
| 				break; | ||||
| 			} | ||||
| 
 | ||||
| @ -809,7 +810,8 @@ void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e) | ||||
| 	list_del(&e->pending_link); | ||||
| 	list_add_tail(&e->link, | ||||
| 		      &e->file_priv->event_list); | ||||
| 	wake_up_interruptible(&e->file_priv->event_wait); | ||||
| 	wake_up_interruptible_poll(&e->file_priv->event_wait, | ||||
| 		EPOLLIN | EPOLLRDNORM); | ||||
| } | ||||
| EXPORT_SYMBOL(drm_send_event_locked); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user