perf: Clean up perf_{session,alloc} management
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Jun 2016 17:59:27 +0000 (13:59 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 17 Jun 2016 16:17:53 +0000 (12:17 -0400)
commitb5e9fa4092747a3c4548a28e382bb34687c34aa3
tree14eed740f42824921f068ab70b0ee43a1242f8f7
parente161ccbdabf89a12ea086a4a5e445f4dd5b9d120
perf: Clean up perf_{session,alloc} management

The big thing was the unnecessary kref on the alloc.  Due to that, we had
the weird alloc_get helper, which either got a ref or dropped it.  We don't
need any of that, and it confuses things.

The one important thing is to use a qlock to avoid a deadlock.  Deadlock is
the likely reason for the kref in the first place, but it was just
unnecessary.

I cleaned up a couple other things: the dealloc funcs don't allow you to
pass in 0.  No one was doing it, and allowing it makes it seems like we
wanted to have that be an option.  perf_alloc_status was renamed.  It had
nothing to do with "struct perf_alloc".  It was trying to get a new status
(a.k.a. to alloc()).  perfmon_install_session_alloc() was needlessly
clever, and the errors() we throw now have real error messages.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/perfmon.c
kern/arch/x86/perfmon.h