All of lore.kernel.org
 help / color / mirror / Atom feed
From: steiner@sgi.com
To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org
Subject: [Patch 16/25] GRU - add refcnt to vdata structure
Date: Thu, 26 Aug 2010 08:19:53 -0500	[thread overview]
Message-ID: <20100826132125.473842811@sgi.com> (raw)
In-Reply-To: 20100826131937.108920216@sgi.com

[-- Attachment #1: uv_gru_refcnt_vdata --]
[-- Type: text/plain, Size: 3770 bytes --]

From: Jack Steiner <steiner@sgi.com>

The GRU vdata structure must have a reference count. 

Signed-off-by: Jack Steiner <steiner@sgi.com>

---
 drivers/misc/sgi-gru/grufile.c   |   21 +++++++++++++++++++--
 drivers/misc/sgi-gru/grumain.c   |    1 +
 drivers/misc/sgi-gru/gruprocfs.c |    1 +
 drivers/misc/sgi-gru/grutables.h |    2 ++
 4 files changed, 23 insertions(+), 2 deletions(-)

Index: linux/drivers/misc/sgi-gru/grufile.c
===================================================================
--- linux.orig/drivers/misc/sgi-gru/grufile.c	2010-07-19 10:25:41.002455321 -0500
+++ linux/drivers/misc/sgi-gru/grufile.c	2010-07-19 10:25:49.182243660 -0500
@@ -65,6 +65,19 @@ static struct miscdevice gru_miscdev;
  * Called when unmapping a device mapping. Frees all gru resources
  * and tables belonging to the vma.
  */
+static void gru_vma_open(struct vm_area_struct *vma)
+{
+	struct gru_vma_data *vdata;
+
+	if (!vma->vm_private_data)
+		return;
+	STAT(vdata_open);
+	vdata = vma->vm_private_data;
+	atomic_inc(&vdata->vd_refcnt);
+	gru_dbg(grudev, "vma %p, file %p, vdata %p\n", vma, vma->vm_file,
+				vdata);
+}
+
 static void gru_vma_close(struct vm_area_struct *vma)
 {
 	struct gru_vma_data *vdata;
@@ -75,9 +88,12 @@ static void gru_vma_close(struct vm_area
 		return;
 
 	vdata = vma->vm_private_data;
+	gru_dbg(grudev, "vma %p, file %p, vdata %p, refcnt %d\n", vma, vma->vm_file,
+				vdata, atomic_read(&vdata->vd_refcnt));
+	if (atomic_dec_return(&vdata->vd_refcnt) != 0)
+		return;
+
 	vma->vm_private_data = NULL;
-	gru_dbg(grudev, "vma %p, file %p, vdata %p\n", vma, vma->vm_file,
-				vdata);
 	list_for_each_safe(entry, next, &vdata->vd_head) {
 		gts =
 		    list_entry(entry, struct gru_thread_state, ts_next);
@@ -597,6 +613,7 @@ static struct miscdevice gru_miscdev = {
 };
 
 const struct vm_operations_struct gru_vm_ops = {
+	.open		= gru_vma_open,
 	.close		= gru_vma_close,
 	.fault		= gru_fault,
 };
Index: linux/drivers/misc/sgi-gru/grumain.c
===================================================================
--- linux.orig/drivers/misc/sgi-gru/grumain.c	2010-07-19 10:25:41.058388796 -0500
+++ linux/drivers/misc/sgi-gru/grumain.c	2010-07-19 10:25:49.186243696 -0500
@@ -374,6 +374,7 @@ struct gru_vma_data *gru_alloc_vma_data(
 	if (IS_ERR(gms))
 		goto err;
 	vdata->vd_gms = gms;
+	atomic_set(&vdata->vd_refcnt, 1);
 
 	STAT(vdata_alloc);
 	INIT_LIST_HEAD(&vdata->vd_head);
Index: linux/drivers/misc/sgi-gru/gruprocfs.c
===================================================================
--- linux.orig/drivers/misc/sgi-gru/gruprocfs.c	2010-07-19 10:25:41.078288158 -0500

+++ linux/drivers/misc/sgi-gru/gruprocfs.c	2010-07-19 10:25:49.214243610 -0500
@@ -42,6 +42,7 @@ static void printstat_val(struct seq_fil
 static int statistics_show(struct seq_file *s, void *p)
 {
 	printstat(s, vdata_alloc);
+	printstat(s, vdata_open);
 	printstat(s, vdata_free);
 	printstat(s, gts_alloc);
 	printstat(s, gts_free);
Index: linux/drivers/misc/sgi-gru/grutables.h
===================================================================
--- linux.orig/drivers/misc/sgi-gru/grutables.h	2010-07-19 10:25:41.130287807 -0500
+++ linux/drivers/misc/sgi-gru/grutables.h	2010-07-19 10:25:49.242242927 -0500
@@ -174,6 +174,7 @@ extern unsigned int gru_max_gids;
  */
 struct gru_stats_s {
 	atomic_long_t vdata_alloc;
+	atomic_long_t vdata_open;
 	atomic_long_t vdata_free;
 	atomic_long_t gts_alloc;
 	atomic_long_t gts_free;
@@ -351,6 +352,7 @@ struct gru_mm_struct {
  */
 struct gru_vma_data {
 	spinlock_t		vd_lock;	/* Serialize access to vma */
+	atomic_t		vd_refcnt;
 	struct list_head	vd_head;	/* head of linked list of gts */
 	struct gru_mm_struct	*vd_gms;	/* asid & ioproc struct */
 	long			vd_user_options;/* misc user option flags */


  parent reply	other threads:[~2010-08-26 13:23 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-26 13:19 [Patch 00/25] GRU - GRU Updates - Production Driver steiner
2010-08-26 13:19 ` [Patch 01/25] GRU - delete obsolete gru instruction opcodes steiner
2010-08-26 13:19 ` [Patch 02/25] GRU - skip gru tlb purging of gru contexts:w steiner
2010-08-26 13:19 ` [Patch 03/25] GRU - update gru tlb miss statistics steiner
2010-08-26 13:19 ` [Patch 04/25] GRU - mmap gru contexts using nonlinear steiner
2010-08-26 13:19 ` [Patch 05/25] GRU - cbe cache flush steiner
2010-08-26 13:19 ` [Patch 06/25] GRU - change context stealing steiner
2010-08-26 13:19 ` [Patch 07/25] GRU - add context lock flag to gru status steiner
2010-08-26 13:19 ` [Patch 08/25] GRU - flush gru tlb when driver is loaded steiner
2010-08-26 13:19 ` [Patch 09/25] GRU - add software reserved bits to cbr definition steiner
2010-08-26 13:19 ` [Patch 10/25] GRU - eliminate gru contention on mmap_sem steiner
2010-08-26 13:19 ` [Patch 11/25] GRU - interrupt fix for processors without core 0 steiner
2010-08-26 13:19 ` [Patch 12/25] GRU - add gru hub number to context status steiner
2010-08-26 13:19 ` [Patch 13/25] GRU - delete obsolete debug code steiner
2010-08-26 13:19 ` [Patch 14/25] GRU - add polling for tlb misses steiner
2010-08-26 13:19 ` [Patch 15/25] GRU - reorder interrupt processing steiner
2010-08-26 13:19 ` steiner [this message]
2010-08-26 13:19 ` [Patch 17/25] GRU - no panic on gru malfunction steiner
2010-08-26 13:19 ` [Patch 18/25] GRU - contexts must contain cbrs steiner
2010-08-26 13:19 ` [Patch 19/25] GRU - update debug messages and comments steiner
2010-08-26 13:19 ` [Patch 20/25] GRU - add gsh information to gru dumps steiner
2010-08-26 13:19 ` [Patch 21/25] GRU - delete unused gru statistics structure steiner
2010-08-26 13:19 ` [Patch 22/25] GRU - gru api cleanup steiner
2010-08-26 13:20 ` [Patch 23/25] GRU - update driverr version steiner
2010-08-26 13:20 ` [Patch 24/25] GRU - rename gru pagesize defines steiner
2010-08-26 13:20 ` [Patch 25/25] GRU - update cbrstate definitions steiner
  -- strict thread matches above, loose matches on Subject: below --
2010-07-19 21:32 [Patch 00/25] GRU - GRU Updates steiner
2010-07-19 21:32 ` [Patch 16/25] GRU - add refcnt to vdata structure steiner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100826132125.473842811@sgi.com \
    --to=steiner@sgi.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.