Fatal trap 12 booting FreeBSD-CURRENT via isboot kernel module.
John Nielsen
lists at jnielsen.net
Tue Feb 6 18:25:30 UTC 2018
> On Feb 4, 2018, at 2:50 AM, Maurizio Vairani <maurizio1018 at gmail.com> wrote:
>
> 2018-01-29 18:38 GMT+01:00 John Nielsen <lists at jnielsen.net>:
> [ resending from correct email address ]
>
>> On Jan 29, 2018, at 6:05 AM, Maurizio Vairani <maurizio1018 at gmail.com> wrote:
>>
>> I am running
>> # uname
>> -a
>>
>> FreeBSD 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r328383: Thu Jan 25 04:48:52
>> UTC 2018 root at releng3.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC
>> amd64
>>
>> After compiling the kernel module as discussed in this thread :
>> https://lists.freebsd.org/pipermail/freebsd-current/2018-January/068272.html
>>
>> I can boot FreeBSD via iSCSI using iPXE. But when the isboot, the iSCSI
>> boot driver version 0.2.13, starts I receive a panic:
>> https://mega.nz/#!tkVwBBKA!PUj14-Za6KCNaoo9hxuXORRLQoWkb4LMvTdUA1BorD4
>>
>> Any idea?
>
> Bummer!
>
> Aoyama-san-
>
> Are you still maintaining isboot? Can you help debug this issue on FreeBSD 12-CURRENT?
>
> Once we get it working I will update the port with whatever is needed and send you the patches in case you'd like to cut a new release.
>
> Thank you!
>
> I have solved the issue changing the function isboot_ifup() in the source file isboot.c.
Nice work, thank you! I'll put the below together with the necessary changes to iscsi.c and update the port. If you could re-install from the port at that point as a further test/sanity check that would be great.
> static int
> isboot_ifup(struct ifnet *ifp)
> {
> struct socket *so;
> struct ifreq ifr;
> struct thread *td;
> int error;
>
> td = curthread;
> error = socreate(AF_INET, &so, SOCK_DGRAM, 0, td->td_ucred, td);
> if (error) {
> printf("%s: socreate, error=%d\n", __func__, error);
> return (error);
> }
>
> /* boot NIC */
> memset(&ifr, 0, sizeof(ifr));
> strlcpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name));
>
> /* set IFF_UP */
> error = ifioctl(so, SIOCGIFFLAGS, (caddr_t)&ifr, td);
> if (error) {
> printf("%s: ifioctl SIOCGIFFLAGS, error=%d\n", __func__, error);
> return (error);
> }
>
> ifr.ifr_flags |= IFF_UP;
> error = ifioctl(so, SIOCSIFFLAGS, (caddr_t)&ifr, td);
> if (error) {
> printf("%s, ifioctl SIOCSIFFLAGS, error=%d\n", __func__, error);
> return (error);
> }
> soclose(so);
> return (0);
> }
>
> I have added a socket in the ifioctl() call as in the /usr/src/sys/nfs/bootp_subr.c source.
> Please let me know if you prefer a patch.
> --
> Regards,
> Maurizio
More information about the freebsd-current
mailing list