sema
isp_intr(ispsoftc_t *isp, uint32_t isr, uint16_t sema, uint16_t mbox)
if (sema) {
isp_prt(isp, ISP_LOGINFO, "interrupt (ISR=%x SEMA=%x) when not ready", isr, sema);
if (optr == iptr && sema == 0) {
sema = ISP_READ(isp, BIU_SEMA);
if ((sema & 0x3) && (mbox & 0x8000)) {
uint16_t sema, mbox;
if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {
isp_intr(isp, isr, sema, mbox);
uint16_t sema, mbox;
if (ISP_READ_ISR(isp, &isr, &sema, &mbox) != 0) {
isp_intr(isp, isr, sema, mbox);
uint16_t sema, mbox;
if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {
isp_intr(isp, isr, sema, mbox);
uint16_t sema, mbox;
if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
isp_intr(isp, isr, sema, mbox);
uint16_t isr, sema;
if (isp_pci_rd_debounced(isp, BIU_SEMA, &sema)) {
sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA));
isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
sema &= BIU_SEMA_LOCK;
if (isr == 0 && sema == 0) {
if ((*semap = sema) != 0) {
semaptr = &sema[semid];
sema = kmalloc(sizeof(struct semid_pool) * seminfo.semmni,
struct semid_pool *semaptr = &sema[i];
static struct semid_pool *sema; /* semaphore id pool */
semaptr = &sema[semid];
if ((sema[semid].ds.sem_perm.mode & SEM_ALLOC) == 0 ||
sema[semid].ds.sem_perm.key != key) {
lockmgr(&sema[semid].lk, LK_EXCLUSIVE);
if ((sema[semid].ds.sem_perm.mode & SEM_ALLOC) == 0 ||
sema[semid].ds.sem_perm.key != key) {
lockmgr(&sema[semid].lk, LK_RELEASE);
&sema[semid].ds.sem_perm,
lockmgr(&sema[semid].lk, LK_RELEASE);
if (nsems > 0 && sema[semid].ds.sem_nsems < nsems) {
lockmgr(&sema[semid].lk, LK_RELEASE);
lockmgr(&sema[semid].lk, LK_RELEASE);
lockmgr(&sema[semid].lk, LK_RELEASE);
if ((sema[semid].ds.sem_perm.mode & SEM_ALLOC) == 0)
lockmgr(&sema[semid].lk, LK_EXCLUSIVE);
sema[semid].ds.sem_perm.key = key;
sema[semid].ds.sem_perm.cuid = cred->cr_uid;
sema[semid].ds.sem_perm.uid = cred->cr_uid;
sema[semid].ds.sem_perm.cgid = cred->cr_gid;
sema[semid].ds.sem_perm.gid = cred->cr_gid;
sema[semid].ds.sem_perm.mode = (semflg & 0777) | SEM_ALLOC;
sema[semid].ds.sem_perm.seq =
(sema[semid].ds.sem_perm.seq + 1) & 0x7fff;
sema[semid].ds.sem_nsems = nsems;
sema[semid].ds.sem_otime = 0;
sema[semid].ds.sem_ctime = time_second;
sema[semid].ds.sem_base = kmalloc(sizeof(struct sem) * nsems,
++sema[semid].gen;
lockmgr(&sema[semid].lk, LK_RELEASE);
sema[semid].ds.sem_base, &sem[semtot]);
IXSEQ_TO_IPCID(semid, sema[semid].ds.sem_perm);
semaptr = &sema[semid];
static void sema_init(struct sema *, char *, int);
static int sema_get(struct sema *, struct lock *);
static void sema_release(struct sema *, struct lock *);
sema_init(struct sema *semap, char *name, int timo)
sema_get(struct sema *semap, struct lock *interlock)
sema_release(struct sema *semap, struct lock *lk)
static struct sema pagedep_in_progress;
static struct sema inodedep_in_progress;
static struct sema newblk_in_progress;
kvm_read(kd, symbols[X_SEMA].n_value, &sema, sizeof(sema));
kvm_read(kd, (u_long) sema, xsema, sizeof(struct semid_pool) * seminfo.semmni);
struct semid_pool *sema;