gru: add comments raised in previous code reviews

Add comments from previous code reviews.  The comments help explain some
of the more esoteric aspects of the driver.

Move a free() to the other side of an unlock.

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Jack Steiner 2009-12-15 16:48:02 -08:00 committed by Linus Torvalds
parent 827f02febf
commit 091f1a1061
2 changed files with 8 additions and 1 deletions

View File

@ -733,6 +733,11 @@ long gru_get_gseg_statistics(unsigned long arg)
if (copy_from_user(&req, (void __user *)arg, sizeof(req))) if (copy_from_user(&req, (void __user *)arg, sizeof(req)))
return -EFAULT; return -EFAULT;
/*
* The library creates arrays of contexts for threaded programs.
* If no gts exists in the array, the context has never been used & all
* statistics are implicitly 0.
*/
gts = gru_find_lock_gts(req.gseg); gts = gru_find_lock_gts(req.gseg);
if (gts) { if (gts) {
memcpy(&req.stats, &gts->ustats, sizeof(gts->ustats)); memcpy(&req.stats, &gts->ustats, sizeof(gts->ustats));

View File

@ -200,13 +200,15 @@ static int gru_free_kernel_contexts(void)
bs = gru_base[bid]; bs = gru_base[bid];
if (!bs) if (!bs)
continue; continue;
/* Ignore busy contexts. Don't want to block here. */
if (down_write_trylock(&bs->bs_kgts_sema)) { if (down_write_trylock(&bs->bs_kgts_sema)) {
kgts = bs->bs_kgts; kgts = bs->bs_kgts;
if (kgts && kgts->ts_gru) if (kgts && kgts->ts_gru)
gru_unload_context(kgts, 0); gru_unload_context(kgts, 0);
kfree(kgts);
bs->bs_kgts = NULL; bs->bs_kgts = NULL;
up_write(&bs->bs_kgts_sema); up_write(&bs->bs_kgts_sema);
kfree(kgts);
} else { } else {
ret++; ret++;
} }