|  | --- a/driver/nvram_stub.c | 
|  | +++ b/driver/nvram_stub.c | 
|  | @@ -22,6 +22,7 @@ typedef struct _vars { | 
|  | #define	VARS_T_OH	sizeof(vars_t) | 
|  |  | 
|  | static vars_t *vars = NULL; | 
|  | +static int nvram_init_done = 0; | 
|  | extern char *nvram_buf[]; | 
|  |  | 
|  | int | 
|  | @@ -33,6 +34,10 @@ BCMATTACHFN(nvram_init)(void *si) | 
|  | uint nvs, bufsz; | 
|  | vars_t *new; | 
|  |  | 
|  | +	nvram_init_done++; | 
|  | +	if (nvram_init_done != 1) | 
|  | +		return 0; | 
|  | + | 
|  | osh = si_osh(sih); | 
|  |  | 
|  | nvs = R_REG(osh, &nvh->len) - sizeof(struct nvram_header); | 
|  | @@ -79,6 +84,10 @@ BCMATTACHFN(nvram_exit)(void *si) | 
|  | vars_t *this, *next; | 
|  | si_t *sih; | 
|  |  | 
|  | +	nvram_init_done--; | 
|  | +	if (nvram_init_done != 0) | 
|  | +		return; | 
|  | + | 
|  | sih = (si_t *)si; | 
|  | this = vars; | 
|  | while (this) { |