From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ilija Hadzic Subject: [PATCH 11/19] drm: do not remove a render node in use Date: Thu, 12 Apr 2012 14:19:36 -0400 Message-ID: <1334254784-3200-12-git-send-email-ihadzic@research.bell-labs.com> References: <1334254784-3200-1-git-send-email-ihadzic@research.bell-labs.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from ihemail4.lucent.com (ihemail4.lucent.com [135.245.0.39]) by gabe.freedesktop.org (Postfix) with ESMTP id 2FD44A0A22 for ; Thu, 12 Apr 2012 11:21:35 -0700 (PDT) Received: from usnavsmail3.ndc.alcatel-lucent.com (usnavsmail3.ndc.alcatel-lucent.com [135.3.39.11]) by ihemail4.lucent.com (8.13.8/IER-o) with ESMTP id q3CILSIG028345 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 12 Apr 2012 13:21:28 -0500 (CDT) Received: from umail.lucent.com (umail-ce2.ndc.lucent.com [135.3.40.63]) by usnavsmail3.ndc.alcatel-lucent.com (8.14.3/8.14.3/GMO) with ESMTP id q3CILRse022368 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 12 Apr 2012 13:21:28 -0500 In-Reply-To: <1334254784-3200-1-git-send-email-ihadzic@research.bell-labs.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org Keep track of per-node open count and do not allow removal of a render node in use. Signed-off-by: Ilija Hadzic --- drivers/gpu/drm/drm_fops.c | 2 ++ drivers/gpu/drm/drm_stub.c | 2 ++ include/drm/drmP.h | 1 + 3 files changed, 5 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 4498d76..686236f 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c @@ -136,6 +136,7 @@ int drm_open(struct inode *inode, struct file *filp) retcode = drm_open_helper(filp, minor); if (!retcode) { atomic_inc(&dev->counts[_DRM_STAT_OPENS]); + minor->open_count++; if (!dev->open_count++) retcode = drm_setup(dev); } @@ -573,6 +574,7 @@ int drm_release(struct inode *inode, struct file *filp) */ atomic_inc(&dev->counts[_DRM_STAT_CLOSES]); + file_priv->minor->open_count--; if (!--dev->open_count) { if (atomic_read(&dev->ioctl_count)) { DRM_ERROR("Device busy: %d\n", diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 6629dd7..5ebc8bc 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -426,6 +426,8 @@ int drm_destroy_render_node(struct drm_device *dev, int index) list_for_each_entry_safe(node, tmp, &dev->render_node_list, list) { if (node->minor->index == index) { + if (node->minor->open_count) + return -EBUSY; list_del(&node->list); drm_put_minor(&node->minor); kfree(node); diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 1131fd4..981f005 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -983,6 +983,7 @@ struct drm_info_node { struct drm_minor { int index; /**< Minor device number */ int type; /**< Control or render */ + int open_count; dev_t device; /**< Device number for mknod */ struct device kdev; /**< Linux device */ struct drm_device *dev; -- 1.7.8.5