Deleted Added
full compact
1/*-
2 * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org>
3 * Copyright (c) 2010 The FreeBSD Foundation
4 * All rights reserved.
5 *
6 * This software was developed by Lawrence Stewart while studying at the Centre
7 * for Advanced Internet Architectures, Swinburne University, made possible in
8 * part by grants from the FreeBSD Foundation and Cisco University Research

--- 21 unchanged lines hidden (view full) ---

30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36
37#include <sys/cdefs.h>
38__FBSDID("$FreeBSD: head/sys/kern/kern_hhook.c 216615 2010-12-21 13:45:29Z lstewart $");
38__FBSDID("$FreeBSD: head/sys/kern/kern_hhook.c 217248 2011-01-11 00:29:17Z lstewart $");
39
40#include <sys/param.h>
41#include <sys/kernel.h>
42#include <sys/hhook.h>
43#include <sys/khelp.h>
44#include <sys/malloc.h>
45#include <sys/module.h>
46#include <sys/module_khelp.h>

--- 104 unchanged lines hidden (view full) ---

151 error = EEXIST;
152 break;
153 }
154 }
155
156 if (!error) {
157 STAILQ_INSERT_TAIL(&hhh->hhh_hooks, hhk, hhk_next);
158 hhh->hhh_nhooks++;
159 }
160 else
159 } else
160 free(hhk, M_HHOOK);
161
162 HHH_WUNLOCK(hhh);
163
164 return (error);
165}
166
167/*

--- 158 unchanged lines hidden (view full) ---

326 * Remove a helper hook point via a hhook_head lookup.
327 */
328int
329hhook_head_deregister_lookup(int32_t hhook_type, int32_t hhook_id)
330{
331 struct hhook_head *hhh;
332 int error;
333
335 error = 0;
334 hhh = hhook_head_get(hhook_type, hhook_id);
335 error = hhook_head_deregister(hhh);
336
337 if (error == EBUSY)
338 hhook_head_release(hhh);
339
340 return (error);
341}

--- 7 unchanged lines hidden (view full) ---

349{
350 struct hhook_head *hhh;
351
352 /* XXXLAS: Pick hhook_head_list based on hhook_head flags. */
353 HHHLIST_LOCK();
354 LIST_FOREACH(hhh, &V_hhook_head_list, hhh_next) {
355 if (hhh->hhh_type == hhook_type && hhh->hhh_id == hhook_id) {
356 refcount_acquire(&hhh->hhh_refcount);
359 HHHLIST_UNLOCK();
360 return (hhh);
357 break;
358 }
359 }
360 HHHLIST_UNLOCK();
361
365 return (NULL);
362 return (hhh);
363}
364
365void
366hhook_head_release(struct hhook_head *hhh)
367{
368
369 refcount_release(&hhh->hhh_refcount);
370}

--- 84 unchanged lines hidden ---