Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Jun 2009 18:09:35 +0000 (UTC)
From:      Robert Noland <rnoland@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r194748 - head/sys/dev/drm
Message-ID:  <200906231809.n5NI9Zan085480@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rnoland
Date: Tue Jun 23 18:09:35 2009
New Revision: 194748
URL: http://svn.freebsd.org/changeset/base/194748

Log:
  Using signals for vblank events is prone to issues.  There have never
  been any consumers and likely will never be.  Furthermore, we have
  never enabled the code for it, so just get rid of it.
  
  MFC after:	3 days

Modified:
  head/sys/dev/drm/drmP.h
  head/sys/dev/drm/drm_irq.c

Modified: head/sys/dev/drm/drmP.h
==============================================================================
--- head/sys/dev/drm/drmP.h	Tue Jun 23 18:00:43 2009	(r194747)
+++ head/sys/dev/drm/drmP.h	Tue Jun 23 18:09:35 2009	(r194748)
@@ -502,19 +502,10 @@ typedef struct drm_local_map {
 	TAILQ_ENTRY(drm_local_map) link;
 } drm_local_map_t;
 
-TAILQ_HEAD(drm_vbl_sig_list, drm_vbl_sig);
-typedef struct drm_vbl_sig {
-	TAILQ_ENTRY(drm_vbl_sig) link;
-	unsigned int	sequence;
-	int		signo;
-	int		pid;
-} drm_vbl_sig_t;
-
 struct drm_vblank_info {
 	wait_queue_head_t queue;	/* vblank wait queue */
 	atomic_t count;			/* number of VBLANK interrupts */
 					/* (driver must alloc the right number of counters) */
-	struct drm_vbl_sig_list sigs;	/* signal list to send on VBLANK */
 	atomic_t refcount;		/* number of users of vblank interrupts */
 	u32 last;			/* protected by dev->vbl_lock, used */
 					/* for wraparound handling */
@@ -684,7 +675,6 @@ struct drm_device {
 	int		  last_context;	/* Last current context		   */
 
 	int		  vblank_disable_allowed;
-	atomic_t 	  vbl_signal_pending;	/* number of signals pending on all crtcs */
 	struct callout	  vblank_disable_timer;
 	u32		  max_vblank_count;	/* size of vblank counter register */
 	struct drm_vblank_info *vblank;		/* per crtc vblank info */
@@ -802,7 +792,6 @@ void	drm_vblank_put(struct drm_device *d
 void	drm_vblank_cleanup(struct drm_device *dev);
 int	drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
 int	drm_vblank_init(struct drm_device *dev, int num_crtcs);
-void	drm_vbl_send_signals(struct drm_device *dev, int crtc);
 int 	drm_modeset_ctl(struct drm_device *dev, void *data,
 			struct drm_file *file_priv);
 

Modified: head/sys/dev/drm/drm_irq.c
==============================================================================
--- head/sys/dev/drm/drm_irq.c	Tue Jun 23 18:00:43 2009	(r194747)
+++ head/sys/dev/drm/drm_irq.c	Tue Jun 23 18:09:35 2009	(r194748)
@@ -121,7 +121,6 @@ int drm_vblank_init(struct drm_device *d
 	int i, ret = ENOMEM;
 
 	callout_init_mtx(&dev->vblank_disable_timer, &dev->vbl_lock, 0);
-	atomic_set(&dev->vbl_signal_pending, 0);
 	dev->num_crtcs = num_crtcs;
 
 	dev->vblank = malloc(sizeof(struct drm_vblank_info) * num_crtcs,
@@ -134,7 +133,6 @@ int drm_vblank_init(struct drm_device *d
 	/* Zero per-crtc vblank stuff */
 	for (i = 0; i < num_crtcs; i++) {
 		DRM_INIT_WAITQUEUE(&dev->vblank[i].queue);
-		TAILQ_INIT(&dev->vblank[i].sigs);
 		atomic_set(&dev->vblank[i].count, 0);
 		atomic_set(&dev->vblank[i].refcount, 0);
 	}
@@ -442,23 +440,7 @@ int drm_wait_vblank(struct drm_device *d
 	}
 
 	if (flags & _DRM_VBLANK_SIGNAL) {
-#if 0 /* disabled */
-		drm_vbl_sig_t *vbl_sig = malloc(sizeof(drm_vbl_sig_t),
-		    DRM_MEM_DRIVER, M_NOWAIT | M_ZERO);
-		if (vbl_sig == NULL)
-			return ENOMEM;
-
-		vbl_sig->sequence = vblwait->request.sequence;
-		vbl_sig->signo = vblwait->request.signal;
-		vbl_sig->pid = DRM_CURRENTPID;
-
-		vblwait->reply.sequence = atomic_read(&dev->vbl_received);
-		
-		DRM_SPINLOCK(&dev->vbl_lock);
-		TAILQ_INSERT_HEAD(&dev->vbl_sig_list, vbl_sig, link);
-		DRM_SPINUNLOCK(&dev->vbl_lock);
-		ret = 0;
-#endif
+		/* There have never been any consumers */
 		ret = EINVAL;
 	} else {
 		DRM_DEBUG("waiting on vblank count %d, crtc %d\n",
@@ -495,38 +477,9 @@ done:
 	return ret;
 }
 
-void drm_vbl_send_signals(struct drm_device *dev, int crtc)
-{
-}
-
-#if 0 /* disabled */
-void drm_vbl_send_signals(struct drm_device *dev, int crtc )
-{
-	drm_vbl_sig_t *vbl_sig;
-	unsigned int vbl_seq = atomic_read( &dev->vbl_received );
-	struct proc *p;
-
-	vbl_sig = TAILQ_FIRST(&dev->vbl_sig_list);
-	while (vbl_sig != NULL) {
-		drm_vbl_sig_t *next = TAILQ_NEXT(vbl_sig, link);
-
-		if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) {
-			p = pfind(vbl_sig->pid);
-			if (p != NULL)
-				psignal(p, vbl_sig->signo);
-
-			TAILQ_REMOVE(&dev->vbl_sig_list, vbl_sig, link);
-			DRM_FREE(vbl_sig,sizeof(*vbl_sig));
-		}
-		vbl_sig = next;
-	}
-}
-#endif
-
 void drm_handle_vblank(struct drm_device *dev, int crtc)
 {
 	atomic_inc(&dev->vblank[crtc].count);
 	DRM_WAKEUP(&dev->vblank[crtc].queue);
-	drm_vbl_send_signals(dev, crtc);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906231809.n5NI9Zan085480>