scsi-da does not work with INVARIANTS (fwd)

From: Nate Lawson <nate_at_root.org>
Date: Mon, 25 Aug 2003 13:49:30 -0700 (PDT)
Ken is aware of the following problem.  It is in both cd(4) and da(4) as
well as stable and current.  One possible approach would be to run
{da,cd}register() from a task queue and not at interrupt time.

-Nate

---------- Forwarded message ----------
Date: Mon, 25 Aug 2003 15:45:22 -0500
From: Aniruddha Bohra <bohra_at_cs.rutgers.edu>
To: njl_at_freebsd.org
Subject: scsi-da does not work with INVARIANTS

[ Also posted to -stable ]
Hello
     I tried compiling the 4-STABLE branch with INVARIANTS and
INVARIANT_SUPPORT.

     I got a panic on boot - The problem is that daregister
calls malloc with M_WAITOK in interrupt context and INVARIANTS
panics the kernel.

  $FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.42.2.40 2003/08/24 03:26:38
ken Exp $

     The problem is in the following lines :

     softc->sysctl_tree = SYSCTL_ADD_NODE(&softc->sysctl_ctx,
     SYSCTL_STATIC_CHILDREN(_kern_cam_da), OID_AUTO, tmpstr2,
         CTLFLAG_RD, 0, tmpstr);


SYSCTL_ADD_NODE is a macro defined in sys/sysctl.h as :
#define SYSCTL_ADD_NODE(ctx, parent,nbr,name,access,handler, descr)\
     sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_NODE|access,\
     0, 0, handler, "N", descr);

And sysctl_add_oid is defined in kern/kern_sysctl.c and has the following :

oidp = malloc(sizeof(struct sysctl_oid), M_SYSCTLOID, M_WAITOK);

which has a WAITOK malloc.


     Unfortunately, I cannot get a trace till tomorrow. Right now
the machine runs fine without INVARIANTS and INVARIANT_SUPPORT.


     Thanks

Aniruddha
Received on Mon Aug 25 2003 - 11:49:30 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:20 UTC