/** * struct bfad_cmd_priv - private data per SCSI command. * @status: Lowest bit represents IO_DONE. The next seven bits hold a value of * type enum bfi_tskim_status. * @wq: Wait queue used to wait for completion of an operation.
*/ struct bfad_cmd_priv { unsignedlong status;
wait_queue_head_t *wq;
};
#define bfad_get_aen_entry(_drv, _entry) do { \ unsignedlong _flags; \
spin_lock_irqsave(&(_drv)->bfad_aen_spinlock, _flags); \
bfa_q_deq(&(_drv)->free_aen_q, &(_entry)); \ if (_entry) \
list_add_tail(&(_entry)->qe, &(_drv)->active_aen_q); \
spin_unlock_irqrestore(&(_drv)->bfad_aen_spinlock, _flags); \
} while (0)
/* post fc_host vendor event */ staticinlinevoid bfad_im_post_vendor_event(struct bfa_aen_entry_s *entry, struct bfad_s *drv, int cnt, enum bfa_aen_category cat, int evt)
{ struct timespec64 ts;
ktime_get_real_ts64(&ts); /* * 'unsigned long aen_tv_sec' overflows in y2106 on 32-bit * architectures, or in 2038 if user space interprets it * as 'signed'.
*/
entry->aen_tv_sec = ts.tv_sec;
entry->aen_tv_usec = ts.tv_nsec / NSEC_PER_USEC;
entry->bfad_num = drv->inst_no;
entry->seq_num = cnt;
entry->aen_category = cat;
entry->aen_type = evt; if (drv->bfad_flags & BFAD_FC4_PROBE_DONE)
queue_work(drv->im->drv_workq, &drv->im->aen_im_notify_work);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.