Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Feb 2010 12:15:45 -0700 (MST)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        batcilla@gmail.com
Cc:        freebsd-arm@freebsd.org
Subject:   Re: kdump on ARM
Message-ID:  <20100217.121545.260300876949842220.imp@bsdimp.com>
In-Reply-To: <6c36ec371002171047m13544419sf8ca5ad283cdc65@mail.gmail.com>
References:  <6c36ec371002170654n5e441c6eib9a8c9aad61c1e87@mail.gmail.com> <20100217.094559.29593248078653355.imp@bsdimp.com> <6c36ec371002171047m13544419sf8ca5ad283cdc65@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <6c36ec371002171047m13544419sf8ca5ad283cdc65@mail.gmail.com=
>
            batcilla itself <batcilla@gmail.com> writes:
: 2010/2/17 M. Warner Losh <imp@bsdimp.com>:
: > In message: <6c36ec371002170654n5e441c6eib9a8c9aad61c1e87@mail.gmai=
l.com>
: > =A0 =A0 =A0 =A0 =A0 =A0batcilla itself <batcilla@gmail.com> writes:=

: > : 2010/2/17 Hans Petter Selasky <hselasky@c2i.net>
: > : >
: > : > On Wednesday 17 February 2010 15:18:12 Grzegorz Bernacki wrote:=

: > : > > Hi,
: > : > >
: > : > > I've noticed that kdump on ARM doesn't work properly, it gene=
rates bus
: > : > > =A0error. The problem is that structures dumped into ktrace.o=
ut are not
: > : > > =A0aligned. Processing such a structure causes Aligment Fault=
. One solution
: > : > > =A0is to copy structure into local variable and then process =
it, please see
: > : > > =A0patch below. But I am not sure if this is the best solutio=
n and maybe
: > : > > =A0someone has a better idea.
: > : > >
: > : > > grzesiek
: > : > >
: > : > >
: > : > > diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
: > : > > index 386221e..5a15886 100644
: > : > > --- a/usr.bin/kdump/kdump.c
: > : > > +++ b/usr.bin/kdump/kdump.c
: > : > > @@ -1325,6 +1325,10 @@ ktrstat(struct stat *statp)
: > : > > =A0 void
: > : > > =A0 ktrstruct(char *buf, size_t buflen)
: > : > > =A0 {
: > : > > +#if defined(__arm__)
: > : > > + =A0 =A0 =A0 struct stat stat;
: > : > > + =A0 =A0 =A0 struct sockaddr sockaddr;
: > : > > +#endif
: > : > > =A0 =A0 =A0 =A0 =A0char *name, *data;
: > : > > =A0 =A0 =A0 =A0 =A0size_t namelen, datalen;
: > : > > =A0 =A0 =A0 =A0 =A0int i;
: > : > > @@ -1348,12 +1352,22 @@ ktrstruct(char *buf, size_t buflen)
: > : > > =A0 =A0 =A0 =A0 =A0if (strcmp(name, "stat") =3D=3D 0) {
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (datalen !=3D sizeof(st=
ruct stat))
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto inval=
id;
: > : > > +#if defined(__arm__)
: > : > > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 memcpy(&stat, data, sizeof(stru=
ct stat));
: > : > > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 ktrstat(&stat);
: > : > > +#else
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ktrstat((struct stat *)dat=
a);
: > : > > +#endif
: > : > > =A0 =A0 =A0 =A0 =A0} else if (strcmp(name, "sockaddr") =3D=3D=
 0) {
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (datalen < sizeof(struc=
t sockaddr) ||
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0datalen !=3D ((str=
uct sockaddr *)(data))->sa_len)
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto inval=
id;
: > : > > +#if defined(__arm__)
: > : > > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 memcpy(&sockaddr, data, sizeof(=
struct sockaddr));
: > : > > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 ktrsockaddr(&sockaddr);
: > : > > +#else
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ktrsockaddr((struct sockad=
dr *)data);
: > : > > +#endif
: > : > > =A0 =A0 =A0 =A0 =A0} else {
: > : > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0printf("unknown structure\=
n");
: > : > > =A0 =A0 =A0 =A0 =A0}
: > : >
: > : > I think more than ARM is affected by this.
: > : >
: > : > --HPS
: > : ARM affected definitely, just today had that Align error with -cu=
rrent
: > : while tried to use ng_bridge with wlan0
: >
: > Where exactly was the error? =A0Do you have a traceback?
: It was ARM/Xcale avila custom nanobsd build, error was caused adding
: wlan0 into ng_bridge, while wlan0 was in tdma master (slot 0) mode,
: with slot 1 there was no errors. Exact message here:
: =

: Fatal kernel mode data abort: 'Alignment Fault 3'
: trapframe: 0xc5e38cac
: FSR=3D00000003, FAR=3Dc10fd1fe, spsr=3D00000013
: r0 =3Dc0e15080, r1 =3Dc0508288, r2 =3Dc10fd1fe, r3 =3D00000001
: r4 =3D0000003c, r5 =3Dc0e15080, r6 =3Dc0e15500, r7 =3Dc111a600
: r8 =3Dc1182a00, r9 =3Dc116dc00, r10=3Dc0e15d80, r11=3D00000001
: r12=3Dc0e15080, ssp=3Dc5e38cf8, slr=3Dc041cb58, pc =3Dc041ec98
: =

: panic: Fatal abort
: Uptime: 3h26m17s
: Cannot dump. Device not defined or unavailable.
: Automatic reboot in 15 seconds - press a key on the console to abort
: =

: uname: avila ... FreeBSD 9.0-CURRENT #1: Wed Feb 17 12:08:37 UTC 2010=
 ... arm
: =

: Not really sure, if this alignment error come from kdump, there is
: really no dump device in this unit and other debugging facilities was=

: turned off to save space.

I'd wager that it wasn't caused by kdump, but something in the kernel.

Warner




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