From: steiner@sgi.com
To: akpm@osdl.org, linux-kernel@vger.kernel.org
Subject: [Patch 16/25] GRU - add refcnt to vdata structure
Date: Mon, 19 Jul 2010 16:32:34 -0500 [thread overview]
Message-ID: <20100719213853.782919513@sgi.com> (raw)
In-Reply-To: 20100719213651.362618144@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 */
next prev parent reply other threads:[~2010-07-19 21:41 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-19 21:32 [Patch 00/25] GRU - GRU Updates steiner
2010-07-19 21:32 ` [Patch 01/25] GRU - delete obsolete gru instruction opcodes steiner
2010-07-19 21:32 ` [Patch 02/25] GRU - skip gru tlb purging of gru contexts:w steiner
2010-07-19 21:32 ` [Patch 03/25] GRU - update gru tlb miss statistics steiner
2010-07-19 21:32 ` [Patch 04/25] GRU - mmap gru contexts using nonlinear steiner
2010-07-19 21:32 ` [Patch 05/25] GRU - cbe cache flush steiner
2010-07-19 21:32 ` [Patch 06/25] GRU - change context stealing steiner
2010-07-19 21:32 ` [Patch 07/25] GRU - add context lock flag to gru status steiner
2010-07-19 21:32 ` [Patch 08/25] GRU - flush gru tlb when driver is loaded steiner
2010-07-19 21:32 ` [Patch 09/25] GRU - add software reserved bits to cbr definition steiner
2010-07-19 21:32 ` [Patch 10/25] GRU - eliminate gru contention on mmap_sem steiner
2010-07-19 21:32 ` [Patch 11/25] GRU - interrupt fix for processors without core 0 steiner
2010-07-19 21:32 ` [Patch 12/25] GRU - add gru hub number to context status steiner
2010-07-19 21:32 ` [Patch 13/25] GRU - delete obsolete debug code steiner
2010-07-19 21:32 ` [Patch 14/25] GRU - add polling for tlb misses steiner
2010-07-19 21:32 ` [Patch 15/25] GRU - reorder interrupt processing steiner
2010-07-19 21:32 ` steiner [this message]
2010-07-19 21:32 ` [Patch 17/25] GRU - no panic on gru malfunction steiner
2010-07-19 21:32 ` [Patch 18/25] GRU - contexts must contain cbrs steiner
2010-07-19 21:32 ` [Patch 19/25] GRU - update debug messages and comments steiner
2010-07-19 21:32 ` [Patch 20/25] GRU - add gsh information to gru dumps steiner
2010-07-19 21:32 ` [Patch 21/25] GRU - delete unused gru statistics structure steiner
2010-07-19 21:32 ` [Patch 22/25] GRU - gru api cleanup steiner
2010-07-19 21:32 ` [Patch 23/25] GRU - update driverr version steiner
2010-07-19 21:32 ` [Patch 24/25] GRU - rename gru pagesize defines steiner
2010-07-19 21:32 ` [Patch 25/25] GRU - update cbrstate definitions steiner
-- strict thread matches above, loose matches on Subject: below --
2010-08-26 13:19 [Patch 00/25] GRU - GRU Updates - Production Driver steiner
2010-08-26 13:19 ` [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=20100719213853.782919513@sgi.com \
--to=steiner@sgi.com \
--cc=akpm@osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox