Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Jan 2007 18:43:27 +0700
From:      Eugene Grosbein <eugen@kuzbass.ru>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: WITNESS & RELENG_6
Message-ID:  <20070104114327.GA81011@svzserv.kemerovo.su>
In-Reply-To: <20070104110208.GG21325@deviant.kiev.zoral.com.ua>
References:  <20070103141820.GA1014@grosbein.pp.ru> <200701031601.05541.jhb@freebsd.org> <20070104040727.GD21325@deviant.kiev.zoral.com.ua> <20070104103708.GF21325@deviant.kiev.zoral.com.ua> <20070104105208.GA78979@svzserv.kemerovo.su> <20070104110208.GG21325@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jan 04, 2007 at 01:02:08PM +0200, Kostik Belousov wrote:

> Hmm, it needs 1.198 as well. Below is aggregated patch against RELENG_6.
> 
> Index: kern_conf.c
> ===================================================================
> RCS file: /usr/local/arch/ncvs/src/sys/kern/kern_conf.c,v
> retrieving revision 1.186.2.7
> diff -u -r1.186.2.7 kern_conf.c
> --- kern_conf.c	30 Oct 2006 15:43:56 -0000	1.186.2.7
> +++ kern_conf.c	4 Jan 2007 10:59:33 -0000
> @@ -676,16 +676,20 @@
>  		dev->si_flags &= ~SI_CLONELIST;
>  	}
>  
> +	dev->si_refcount++;	/* Avoid race with dev_rel() */
>  	csw = dev->si_devsw;
>  	dev->si_devsw = NULL;	/* already NULL for SI_ALIAS */
>  	while (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) {
> -		printf("Purging %lu threads from %s\n",
> -		    dev->si_threadcount, devtoname(dev));
>  		csw->d_purge(dev);
>  		msleep(csw, &devmtx, PRIBIO, "devprg", hz/10);
> +		if (dev->si_threadcount)
> +			printf("Still %lu threads in %s\n",
> +			    dev->si_threadcount, devtoname(dev));
> +	}
> +	while (dev->si_threadcount != 0) {
> +		/* Use unique dummy wait ident */
> +		msleep(&csw, &devmtx, PRIBIO, "devdrn", hz / 10);
>  	}
> -	if (csw != NULL && csw->d_purge != NULL)
> -		printf("All threads purged from %s\n", devtoname(dev));
>  
>  	dev->si_drv1 = 0;
>  	dev->si_drv2 = 0;
> @@ -700,6 +704,7 @@
>  			fini_cdevsw(csw);
>  	}
>  	dev->si_flags &= ~SI_ALIAS;
> +	dev->si_refcount--;	/* Avoid race with dev_rel() */
>  
>  	if (dev->si_refcount > 0) {
>  		LIST_INSERT_HEAD(&dead_cdevsw.d_devs, dev, si_list);

I've tried. Now machine just hangs if I try to switch from X to vty.
It stays in graphics mode locked.

Eugene



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070104114327.GA81011>