From owner-freebsd-arch Wed Sep 19 16:56: 2 2001 Delivered-To: freebsd-arch@freebsd.org Received: from antipater.hosting.pacbell.net (antipater.hosting.pacbell.net [216.100.99.13]) by hub.freebsd.org (Postfix) with ESMTP id 062A437B417 for ; Wed, 19 Sep 2001 16:55:54 -0700 (PDT) Received: from c1435077a (adsl-64-172-38-74.dsl.snfc21.pacbell.net [64.172.38.74]) by antipater.hosting.pacbell.net id TAA04339; Wed, 19 Sep 2001 19:55:50 -0400 (EDT) [ConcentricHost SMTP Relay 1.7] Message-ID: <00dd01c14164$c54b3560$4a10a8c0@stcla1.sfba.home.com> Reply-To: "mike varga" From: "mike varga" To: Subject: kevent hangs Date: Wed, 19 Sep 2001 16:42:31 -0700 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_00DA_01C1412A.137AA080" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG This is a multi-part message in MIME format. ------=_NextPart_000_00DA_01C1412A.137AA080 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I opted to break the changelist=20 and eventlist into 2 seperate calls. When I make the first call to add the=20 changelist, the call to kevent hangs. Does anyone know what is wrong? /*****APPLICATION CODE****/ { struct timespec to; int n; struct kevent ke; int data, udata; PKP_kq_handle =3D kqueue(); =20 to.tv_sec =3D 2; /* seconds */ to.tv_nsec =3D 10000; /* and microseconds */ EV_SET(&ke, PKP_driver_handle, EVFILT_READ, EV_ADD, 0,NULL,NULL); =20 /******* HANGS ON THIS CALL *********/ if (kevent(PKP_kq_handle,&ke,1,NULL,0,&to) <=3D 0) { close(PKP_kq_handle); PKP_kq_handle =3D -1; return errno; } else cond_code =3D 0; =20 /******DRIVER CODE*****/ static struct filterops cavium_filtops =3D { 1, NULL, kqdetach, kqfilter }; static int kqfilter(struct knote* kn, long hint) { cavium_softc* sc; DEBUG_PRINT(("CAVIUM kqfilter: 1 called\n")); =20 sc =3D (cavium_softc*)kn->kn_hook; return 1; } static void kqdetach(struct knote* kn) { cavium_softc* sc; =20 DEBUG_PRINT(("CAVIUM kqdetach: 1 called\n")); sc =3D (cavium_softc*)kn->kn_hook; =20 LOCK(sc->cache_lock,sc->cache_slock); SLIST_REMOVE(&sc->klist,kn,knote,kn_selnext); UNLOCK(sc->cache_lock,sc->cache_slock); } int cavium_kqueue(dev_t dev, struct knote* kn) { int unit; cavium_softc* sc; =20 DEBUG_PRINT(("CAVIUM cavium_kqfilter: 1 called\n")); =20 unit =3D UNIT(dev); if (!(sc=3DGET_SOFTC(unit))) { DEBUG_PRINT(("CAVIUM cavium_open: failed\n")); return 1; } switch(kn->kn_filter) { case EVFILT_READ: kn->kn_fop =3D &cavium_filtops; break; default: return 1; } =20 DEBUG_PRINT(("CAVIUM cavium_kqfilter: 2 called\n")); =20 kn->kn_hook =3D (caddr_t)sc;=20 LOCK(sc->cache_lock,sc->cache_slock); SLIST_INSERT_HEAD(&sc->klist,kn,kn_selnext); UNLOCK(sc->cache_lock,sc->cache_slock); =20 DEBUG_PRINT(("CAVIUM cavium_kqfilter: 3 called\n")); return 0; } ------=_NextPart_000_00DA_01C1412A.137AA080 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
I opted to break the=20 changelist
and eventlist into 2=20 seperate calls.
 
When I make the first call to add the =
changelist, the call to kevent = hangs.
 
Does anyone know what is wrong?
 
/*****APPLICATION CODE****/
 {
 struct timespec to;
 int = n;
 struct kevent=20 ke;
 int data, udata;

  PKP_kq_handle =3D=20 kqueue();
  
  to.tv_sec =3D=20 2;         /* seconds=20 */
         to.tv_nsec =3D=20 10000;        /* and microseconds = */
 
  EV_SET(&ke, PKP_driver_handle, EVFILT_READ,=20 EV_ADD,
   0,NULL,NULL);
 
/******* HANGS ON THIS CALL *********/
  if=20 (kevent(PKP_kq_handle,&ke,1,NULL,0,&to) <=3D=20 0)
  {
   close(PKP_kq_handle);
 &= nbsp; PKP_kq_handle=20 =3D -1;
   return=20 errno;
  }
  else
   cond_cod= e =3D=20 0;
 
 
 
 
 
/******DRIVER CODE*****/
 
static struct filterops cavium_filtops =3D=20 {
 1,
 NULL,
 kqdetach,
 kqfilter
};
 
static int kqfilter(struct knote* kn, long=20 hint)
{
 cavium_softc* sc;
 DEBUG_PRINT(("CAVIUM = kqfilter: 1=20 called\n"));
 
 sc =3D = (cavium_softc*)kn->kn_hook;
 
 return 1;
}
 
static void kqdetach(struct knote* kn)
{
 cavium_softc*=20 sc;
 
 DEBUG_PRINT(("CAVIUM kqdetach: 1 = called\n"));
 
 sc =3D=20 (cavium_softc*)kn->kn_hook;
 
 LOCK(sc->cache_lock,= sc->cache_slock);
 SLIST_REMOVE(&sc->klist,kn,knote,kn_= selnext);
 UNLOCK(sc->cache_lock,sc->cache_slock);
}
 
int cavium_kqueue(dev_t dev, struct knote* kn)
{
 int=20 unit;
 cavium_softc* sc;
 
 DEBUG_PRINT(("CAVIUM = cavium_kqfilter: 1 called\n"));
 
 unit =3D = UNIT(dev);
 
 if=20 (!(sc=3DGET_SOFTC(unit)))
 {
  DEBUG_PRINT(("CAVIUM = cavium_open: failed\n"));
  return 1;
 }
 
 switch(kn->kn_filter)
 {
  case=20 EVFILT_READ:
   kn->kn_fop =3D=20 &cavium_filtops;
   break;
  default:<= BR>   return=20 1;
 }
 
 DEBUG_PRINT(("CAVIUM cavium_kqfilter: 2 = called\n"));
 
 kn->kn_hook =3D = (caddr_t)sc; 
 
 LOCK(sc->cache_lock,sc->cache_slock);
 SLIST_INS= ERT_HEAD(&sc->klist,kn,kn_selnext);
 UNLOCK(sc->cache_l= ock,sc->cache_slock);
 
 DEBUG_PRINT(("CAVIUM=20 cavium_kqfilter: 3 called\n"));
 return=20 0;
}
------=_NextPart_000_00DA_01C1412A.137AA080-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message