kern/176471: [xen] xn driver crash on detach

Petri Helenius petri at helenius.fi
Fri Mar 1 10:20:02 UTC 2013


The following reply was made to PR kern/176471; it has been noted by GNATS.

From: Petri Helenius <petri at helenius.fi>
To: =?iso-8859-1?Q?Roger_Pau_Monn=E9?= <roger.pau at citrix.com>
Cc: <bug-followup at FreeBSD.org>,
 <pete at helenius.fi>
Subject: Re: kern/176471: [xen] xn driver crash on detach
Date: Fri, 1 Mar 2013 12:19:34 +0200

 On Feb 28, 2013, at 19:58 , Roger Pau Monn=E9 <roger.pau at citrix.com> =
 wrote:
 
 > Hi (again),
 >=20
 > I've just realized the previous patch also crashed when trying to=20
 > detach an interface that's up and running, the following patch allows=20=
 
 > to detach the interface while running without crashing the FreeBSD=20
 > kernel.
 >=20
 > Also, what do you mean by "changing configuration of xn network"?
 
 Using the management console, I think it just does detach / attach.=20
 
 The second patch works in 10-CURRENT, will try 9-STABLE.=20
 
 Pete
 
 >=20
 > ---
 > =46rom 9c0097ed4775c68769049c61e474ddb62cc11d1f Mon Sep 17 00:00:00 =
 2001
 > From: Roger Pau Monne <roger.pau at citrix.com>
 > Date: Thu, 28 Feb 2013 17:43:34 +0100
 > Subject: [PATCH] xen-netfront: fix detach of network interfaces
 >=20
 > Remove all the media and the interface when detaching it. Prevents the
 > following panic when detaching an interface (xl network-detach freebsd
 > 1)
 >=20
 > xn1: detached
 >=20
 > Fatal trap 12: page fault while in kernel mode
 > cpuid =3D 3; apic id =3D 06
 > fault virtual address	=3D 0xffffff80028ff2a0
 > fault code		=3D supervisor read data, page not present
 > instruction pointer	=3D 0x20:0xffffffff809653af
 > stack pointer	        =3D 0x28:0xffffff8117cb4940
 > frame pointer	        =3D 0x28:0xffffff8117cb4980
 > code segment		=3D base 0x0, limit 0xfffff, type 0x1b
 > 			=3D DPL 0, pres 1, long 1, def32 0, gran 1
 > processor eflags	=3D interrupt enabled, resume, IOPL =3D 0
 > current process		=3D 699 (devd)
 > [ thread pid 699 tid 100107 ]
 > Stopped at      ifmedia_ioctl+0x3f:     movq    0x8(%r12),%rcx
 > db> trace
 > Tracing pid 706 tid 100059 td 0xfffffe0006b69480
 > ifmedia_ioctl() at ifmedia_ioctl+0x3f/frame 0xffffff80f774c980
 > ifioctl() at ifioctl+0xeb7/frame 0xffffff80f774ca40
 > kern_ioctl() at kern_ioctl+0x1ce/frame 0xffffff80f774ca90
 > sys_ioctl() at sys_ioctl+0x11f/frame 0xffffff80f774cae0
 > amd64_syscall() at amd64_syscall+0x265/frame 0xffffff80f774cbf0
 > Xfast_syscall() at Xfast_syscall+0xfb/frame 0xffffff80f774cbf0
 > --- syscall (54, FreeBSD ELF64, sys_ioctl), rip =3D 0x44c60a, rsp =3D =
 0x7fffffffd678, rbp =3D 0x7fffffffd750 ---
 >=20
 > PR: 176471
 > ---
 > sys/dev/xen/netfront/netfront.c |    7 +++++++
 > 1 files changed, 7 insertions(+), 0 deletions(-)
 >=20
 > diff --git a/sys/dev/xen/netfront/netfront.c =
 b/sys/dev/xen/netfront/netfront.c
 > index 88641e3..3a8b8ea 100644
 > --- a/sys/dev/xen/netfront/netfront.c
 > +++ b/sys/dev/xen/netfront/netfront.c
 > @@ -2171,7 +2171,14 @@ netfront_detach(device_t dev)
 > static void
 > netif_free(struct netfront_info *info)
 > {
 > +	XN_LOCK(info);
 > +	xn_stop(info);
 > +	XN_UNLOCK(info);
 > +	callout_drain(&info->xn_stat_ch);
 > 	netif_disconnect_backend(info);
 > +	ifmedia_removeall(&info->sc_media);
 > +	ether_ifdetach(info->xn_ifp);
 > +	if_free(info->xn_ifp);
 > #if 0
 > 	close_netdev(info);
 > #endif
 > --=20
 > 1.7.7.5 (Apple Git-26)
 


More information about the freebsd-xen mailing list