Home | History | Annotate | Line # | Download | only in raidframe
rf_shutdown.c revision 1.6.8.3
      1  1.6.8.3  jdolecek /*	$NetBSD: rf_shutdown.c,v 1.6.8.3 2002/10/10 18:42:00 jdolecek Exp $	*/
      2      1.1     oster /*
      3      1.1     oster  * rf_shutdown.c
      4      1.1     oster  */
      5      1.1     oster /*
      6      1.1     oster  * Copyright (c) 1996 Carnegie-Mellon University.
      7      1.1     oster  * All rights reserved.
      8      1.1     oster  *
      9      1.1     oster  * Author: Jim Zelenka
     10      1.1     oster  *
     11      1.1     oster  * Permission to use, copy, modify and distribute this software and
     12      1.1     oster  * its documentation is hereby granted, provided that both the copyright
     13      1.1     oster  * notice and this permission notice appear in all copies of the
     14      1.1     oster  * software, derivative works or modified versions, and any portions
     15      1.1     oster  * thereof, and that both notices appear in supporting documentation.
     16      1.1     oster  *
     17      1.1     oster  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
     18      1.1     oster  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
     19      1.1     oster  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     20      1.1     oster  *
     21      1.1     oster  * Carnegie Mellon requests users of this software to return to
     22      1.1     oster  *
     23      1.1     oster  *  Software Distribution Coordinator  or  Software.Distribution (at) CS.CMU.EDU
     24      1.1     oster  *  School of Computer Science
     25      1.1     oster  *  Carnegie Mellon University
     26      1.1     oster  *  Pittsburgh PA 15213-3890
     27      1.1     oster  *
     28      1.1     oster  * any improvements or extensions that they make and grant Carnegie the
     29      1.1     oster  * rights to redistribute these changes.
     30      1.1     oster  */
     31      1.1     oster /*
     32      1.1     oster  * Maintain lists of cleanup functions. Also, mechanisms for coordinating
     33      1.1     oster  * thread startup and shutdown.
     34      1.1     oster  */
     35      1.1     oster 
     36  1.6.8.1   thorpej #include <sys/cdefs.h>
     37  1.6.8.3  jdolecek __KERNEL_RCSID(0, "$NetBSD: rf_shutdown.c,v 1.6.8.3 2002/10/10 18:42:00 jdolecek Exp $");
     38  1.6.8.1   thorpej 
     39  1.6.8.1   thorpej #include <dev/raidframe/raidframevar.h>
     40  1.6.8.1   thorpej 
     41  1.6.8.1   thorpej #include "rf_archs.h"
     42      1.1     oster #include "rf_shutdown.h"
     43      1.1     oster #include "rf_freelist.h"
     44      1.1     oster 
     45  1.6.8.3  jdolecek 
     46  1.6.8.3  jdolecek #ifndef RF_DEBUG_SHUTDOWN
     47  1.6.8.3  jdolecek #define RF_DEBUG_SHUTDOWN 0
     48  1.6.8.3  jdolecek #endif
     49  1.6.8.3  jdolecek 
     50  1.6.8.3  jdolecek static void rf_FreeShutdownEnt(RF_ShutdownList_t *);
     51  1.6.8.3  jdolecek 
     52      1.4     oster static void
     53      1.4     oster rf_FreeShutdownEnt(RF_ShutdownList_t * ent)
     54      1.1     oster {
     55      1.4     oster 	FREE(ent, M_RAIDFRAME);
     56      1.1     oster }
     57      1.1     oster 
     58      1.4     oster int
     59      1.4     oster _rf_ShutdownCreate(
     60      1.4     oster     RF_ShutdownList_t ** listp,
     61      1.4     oster     void (*cleanup) (void *arg),
     62      1.4     oster     void *arg,
     63      1.4     oster     char *file,
     64      1.4     oster     int line)
     65      1.1     oster {
     66      1.4     oster 	RF_ShutdownList_t *ent;
     67      1.1     oster 
     68      1.4     oster 	/*
     69      1.4     oster          * Have to directly allocate memory here, since we start up before
     70      1.4     oster          * and shutdown after RAIDframe internal allocation system.
     71      1.4     oster          */
     72      1.6     oster 	/* 	ent = (RF_ShutdownList_t *) malloc(sizeof(RF_ShutdownList_t),
     73      1.6     oster 		M_RAIDFRAME, M_WAITOK); */
     74      1.6     oster 	ent = (RF_ShutdownList_t *) malloc(sizeof(RF_ShutdownList_t),
     75      1.6     oster 					   M_RAIDFRAME, M_NOWAIT);
     76      1.4     oster 	if (ent == NULL)
     77      1.4     oster 		return (ENOMEM);
     78      1.4     oster 	ent->cleanup = cleanup;
     79      1.4     oster 	ent->arg = arg;
     80      1.4     oster 	ent->file = file;
     81      1.4     oster 	ent->line = line;
     82      1.4     oster 	ent->next = *listp;
     83      1.4     oster 	*listp = ent;
     84      1.4     oster 	return (0);
     85      1.1     oster }
     86      1.1     oster 
     87      1.4     oster int
     88      1.4     oster rf_ShutdownList(RF_ShutdownList_t ** list)
     89      1.1     oster {
     90      1.4     oster 	RF_ShutdownList_t *r, *next;
     91  1.6.8.3  jdolecek #if RF_DEBUG_SHUTDOWN
     92      1.4     oster 	char   *file;
     93      1.4     oster 	int     line;
     94  1.6.8.3  jdolecek #endif
     95      1.4     oster 
     96      1.4     oster 	for (r = *list; r; r = next) {
     97      1.4     oster 		next = r->next;
     98  1.6.8.3  jdolecek #if RF_DEBUG_SHUTDOWN
     99      1.4     oster 		file = r->file;
    100      1.4     oster 		line = r->line;
    101      1.4     oster 
    102      1.4     oster 		if (rf_shutdownDebug) {
    103      1.5     oster 			printf("call shutdown, created %s:%d\n", file, line);
    104      1.4     oster 		}
    105  1.6.8.3  jdolecek #endif
    106      1.4     oster 		r->cleanup(r->arg);
    107  1.6.8.3  jdolecek #if RF_DEBUG_SHUTDOWN
    108      1.4     oster 		if (rf_shutdownDebug) {
    109      1.5     oster 			printf("completed shutdown, created %s:%d\n", file, line);
    110      1.4     oster 		}
    111  1.6.8.3  jdolecek #endif
    112      1.4     oster 		rf_FreeShutdownEnt(r);
    113      1.4     oster 	}
    114      1.4     oster 	*list = NULL;
    115      1.4     oster 	return (0);
    116      1.1     oster }
    117