lpfc_sli4_hba_intr_handler(9)
π lpfc_sli4_hba_intr_handler(9) π
okay bestie, welcome to the Kernel API Manual entry for lpfc_sli4_hba_intr_handler β the literal main character of SLI-4 interrupt handling π«Ά she's the one who answers when your HBA knocks, and she takes her job very seriously π
πΈ NAME πΈ
lpfc_sli4_hba_intr_handler β the HBA interrupt handler for an SLI-4 device, no cap β¨
β¨ SYNOPSIS β¨
irqreturn_t lpfc_sli4_hba_intr_handler (int irq , void *dev_id );
π ARGUMENTS π
irqβ the interrupt number, iykyk π’dev_idβ the device context pointer, aka the little handle that tells her which device we're talking about π«Ά
π¦ DESCRIPTION π¦
so here's the tea β this function gets called directly from the PCI layer as an interrupt service routine when a device with the SLI-4 interface spec is enabled with MSI-X multi-message interrupt mode and there's a fast-path FCP IOCB ring event hanging out in the HBA. slay π
but!! when the device is enabled with either MSI or Pin-IRQ interrupt mode, this function is instead called as part of the device-level interrupt handler. context matters, bestie π
and the vibe check she fails on purpose: when the PCI slot is in error recovery, or the HBA is undergoing initialization, the interrupt handler will not process the interrupt. she's literally not doing it, don't ask π«
the SCSI FCP fast-path ring events are handled right there in the interrupt context. this function is called without any lock held β she picks up the hbalock herself to access and update SLI data structures π also keep in mind: the FCP EQ to FCP CQ are a one-to-one map, so the FCP EQ index is equal to the FCP CQ index. matching, as they should π
now for the events she delegates π§ link attention and ELS ring attention events are handled by the worker thread. the interrupt handler just signals the worker thread and returns for these events. and yes, saying it again because it's important: this function is called without any lock held, and it gets the hbalock to access and update SLI data structures π
for her return values, she's giving range π
IRQ_HANDLEDβ when the interrupt is handled βIRQ_WAKE_THREADβ when the interrupt is scheduled to be handled from a threaded irq context π§΅IRQ_NONEβ or else, when none of the above applies π
ngl bestie, that return-value list is the whole personality test β pick the right one and everything's iconic, pick wrong and the kernel is not having it π
π SEE ALSO π
literally the entire extended friend group at Kernel file ./drivers/scsi/lpfc/lpfc_sli.c β copy these exactly, no renaming, no "fixing", fr fr π«Ά
lpfc_sli4_pcimem_bcopy(9),
lpfc_sli4_wq_put(9), lpfc_sli4_wq_release(9), lpfc_sli4_mq_put(9),
lpfc_sli4_mq_release(9), lpfc_sli4_eq_get(9), lpfc_sli4_eq_clr_intr(9),
lpfc_sli4_if6_eq_clr_intr(9), lpfc_sli4_write_eq_db(9),
lpfc_sli4_if6_write_eq_db(9), lpfc_sli4_cq_get(9),
lpfc_sli4_write_cq_db(9), lpfc_sli4_if6_write_cq_db(9),
lpfc_cmd_iocb(9), lpfc_resp_iocb(9), __lpfc_sli_get_iocbq(9),
__lpfc_clear_active_sglq(9), __lpfc_get_active_sglq(9),
lpfc_clr_rrq_active(9), lpfc_handle_rrq_active(9),
lpfc_get_active_rrq(9), lpfc_cleanup_vports_rrqs(9),
lpfc_test_rrq_active(9), lpfc_set_rrq_active(9),
__lpfc_sli_get_els_sglq(9), __lpfc_sli_get_nvmet_sglq(9),
lpfc_sli_get_iocbq(9), __lpfc_sli_release_iocbq_s4(9),
__lpfc_sli_release_iocbq_s3(9), __lpfc_sli_release_iocbq(9),
lpfc_sli_release_iocbq(9), lpfc_sli_cancel_iocbs(9),
lpfc_sli_iocb_cmd_type(9), lpfc_sli_ring_map(9),
lpfc_sli_ringtxcmpl_put(9), lpfc_sli_ringtx_get(9),
lpfc_cmf_sync_cmpl(9), lpfc_issue_cmf_sync_wqe(9),
lpfc_sli_next_iocb_slot(9), lpfc_sli_next_iotag(9),
lpfc_sli_submit_iocb(9), lpfc_sli_update_full_ring(9),
lpfc_sli_update_ring(9), lpfc_sli_resume_iocb(9),
lpfc_sli_next_hbq_slot(9), lpfc_sli_hbqbuf_free_all(9),
lpfc_sli_hbq_to_firmware(9), lpfc_sli_hbq_to_firmware_s3(9),
lpfc_sli_hbq_to_firmware_s4(9), lpfc_sli_hbqbuf_fill_hbqs(9),
lpfc_sli_hbqbuf_add_hbqs(9), lpfc_sli_hbqbuf_init_hbqs(9),
lpfc_sli_rqbuf_get(9), lpfc_sli_hbqbuf_find(9), lpfc_sli_free_hbq(9),
lpfc_sli_chk_mbx_command(9), lpfc_sli_wake_mbox_wait(9),
lpfc_sli_def_mbox_cmpl(9), lpfc_sli_handle_mb_event(9),
lpfc_sli_get_buff(9), lpfc_nvme_unsol_ls_handler(9),
lpfc_complete_unsol_iocb(9), lpfc_sli_process_unsol_iocb(9),
lpfc_sli_iocbq_lookup(9), lpfc_sli_iocbq_lookup_by_tag(9),
lpfc_sli_process_sol_iocb(9), lpfc_sli_rsp_pointers_error(9),
lpfc_poll_eratt(9), lpfc_sli_handle_fast_ring_event(9),
lpfc_sli_sp_handle_rspiocb(9), lpfc_sli_handle_slow_ring_event(9),
lpfc_sli_handle_slow_ring_event_s3(9),
lpfc_sli_handle_slow_ring_event_s4(9), lpfc_sli_abort_iocb_ring(9),
lpfc_sli_abort_fcp_rings(9), lpfc_sli_flush_io_rings(9),
lpfc_sli_brdready_s3(9), lpfc_sli_brdready_s4(9), lpfc_sli_brdready(9),
lpfc_reset_barrier(9), lpfc_sli_brdkill(9), lpfc_sli_brdreset(9),
lpfc_sli4_brdreset(9), lpfc_sli_brdrestart_s3(9),
lpfc_sli_brdrestart_s4(9), lpfc_sli_brdrestart(9),
lpfc_sli_chipset_init(9), lpfc_sli_hbq_count(9),
lpfc_sli_hbq_entry_count(9), lpfc_sli_hbq_size(9),
lpfc_sli_hbq_setup(9), lpfc_sli4_rb_setup(9), lpfc_sli_config_port(9),
lpfc_sli_hba_setup(9), lpfc_sli4_read_fcoe_params(9),
lpfc_sli4_read_rev(9), lpfc_sli4_get_ctl_attr(9),
lpfc_sli4_retrieve_pport_name(9), lpfc_sli4_arm_cqeq_intr(9),
lpfc_sli4_get_avail_extnt_rsrc(9), lpfc_sli4_chk_avail_extnt_rsrc(9),
lpfc_sli4_cfg_post_extnts(9), lpfc_sli4_alloc_extent(9),
lpfc_sli4_dealloc_extent(9), lpfc_ras_stop_fwlog(9),
lpfc_sli4_ras_dma_free(9), lpfc_sli4_ras_dma_alloc(9),
lpfc_sli4_ras_mbox_cmpl(9), lpfc_sli4_ras_fwlog_init(9),
lpfc_sli4_ras_setup(9), lpfc_sli4_alloc_resource_identifiers(9),
lpfc_sli4_dealloc_resource_identifiers(9),
lpfc_sli4_get_allocated_extnts(9), lpfc_sli4_repost_sgl_list(9),
lpfc_sli4_repost_io_sgl_list(9), lpfc_init_idle_stat_hb(9),
lpfc_rx_monitor_create_ring(9), lpfc_rx_monitor_destroy_ring(9),
lpfc_rx_monitor_record(9), lpfc_rx_monitor_report(9), lpfc_cmf_setup(9),
lpfc_get_platform_uuid(9), lpfc_sli4_hba_setup(9), lpfc_mbox_timeout(9),
lpfc_sli4_mbox_completions_pending(9),
lpfc_sli4_process_missed_mbox_completions(9),
lpfc_mbox_timeout_handler(9), lpfc_sli_issue_mbox_s3(9),
lpfc_sli4_async_mbox_block(9), lpfc_sli4_async_mbox_unblock(9),
lpfc_sli4_wait_bmbx_ready(9), lpfc_sli4_post_sync_mbox(9),
lpfc_sli_issue_mbox_s4(9), lpfc_sli4_post_async_mbox(9),
lpfc_sli_issue_mbox(9), lpfc_mbox_api_table_setup(9),
__lpfc_sli_ringtx_put(9), lpfc_sli_next_iocb(9),
__lpfc_sli_issue_iocb_s3(9), __lpfc_sli_issue_fcp_io_s3(9),
__lpfc_sli_issue_fcp_io_s4(9), __lpfc_sli_issue_iocb_s4(9),
lpfc_sli_api_table_setup(9), lpfc_sli4_calc_ring(9),
lpfc_sli_issue_iocb(9), lpfc_extra_ring_setup(9),
lpfc_sli_async_event_handler(9), lpfc_sli4_setup(9), lpfc_sli_setup(9),
lpfc_sli4_queue_init(9), lpfc_sli_queue_init(9),
lpfc_sli_mbox_sys_flush(9), lpfc_sli_host_down(9), lpfc_sli_hba_down(9),
lpfc_sli_pcimem_bcopy(9), lpfc_sli_bemem_bcopy(9),
lpfc_sli_ringpostbuf_put(9), lpfc_sli_get_buffer_tag(9),
lpfc_sli_ring_taggedbuf_get(9), lpfc_sli_ringpostbuf_get(9),
lpfc_sli_abort_els_cmpl(9), lpfc_ignore_els_cmpl(9),
lpfc_sli_issue_abort_iotag(9), lpfc_sli_hba_iocb_abort(9),
lpfc_sli_validate_fcp_iocb_for_abort(9), lpfc_sli_validate_fcp_iocb(9),
lpfc_sli_sum_iocb(9), lpfc_sli_abort_fcp_cmpl(9),
lpfc_sli_abort_iocb(9), lpfc_sli_abort_taskmgmt(9),
lpfc_sli_wake_iocb_wait(9), lpfc_chk_iocb_flg(9),
lpfc_sli_issue_iocb_wait(9), lpfc_sli_issue_mbox_wait(9),
lpfc_sli_mbox_sys_shutdown(9), lpfc_sli_eratt_read(9),
lpfc_sli4_eratt_read(9), lpfc_sli_check_eratt(9),
lpfc_intr_state_check(9), lpfc_sli_sp_intr_handler(9),
lpfc_sli_fp_intr_handler(9), lpfc_sli_intr_handler(9),
lpfc_sli4_els_xri_abort_event_proc(9),
lpfc_sli4_els_preprocess_rspiocbq(9),
lpfc_sli4_sp_handle_async_event(9), lpfc_sli4_sp_handle_mbox_event(9),
lpfc_sli4_sp_handle_mcqe(9), lpfc_sli4_sp_handle_els_wcqe(9),
lpfc_sli4_sp_handle_rel_wcqe(9), lpfc_sli4_sp_handle_abort_xri_wcqe(9),
lpfc_sli4_sp_handle_rcqe(9), lpfc_sli4_sp_handle_cqe(9),
lpfc_sli4_sp_handle_eqe(9), __lpfc_sli4_process_cq(9),
__lpfc_sli4_sp_process_cq(9), lpfc_sli4_sp_process_cq(9),
lpfc_sli4_dly_sp_process_cq(9), lpfc_sli4_fp_handle_fcp_wcqe(9),
lpfc_sli4_fp_handle_rel_wcqe(9), lpfc_sli4_nvmet_handle_rcqe(9),
lpfc_sli4_fp_handle_cqe(9), __lpfc_sli4_hba_process_cq(9),
lpfc_sli4_hba_process_cq(9), lpfc_sli4_hba_handle_eqe(9),
lpfc_sli4_dly_hba_process_cq(9), lpfc_sli4_intr_handler(9),
lpfc_sli4_queue_free(9), lpfc_sli4_queue_alloc(9),
lpfc_dual_chute_pci_bar_map(9), lpfc_modify_hba_eq_delay(9),
lpfc_eq_create(9), lpfc_sli4_hba_intr_handler_th(9), lpfc_cq_create(9),
lpfc_cq_create_set(9), lpfc_mq_create_fb_init(9), lpfc_mq_create(9),
lpfc_wq_create(9), lpfc_rq_create(9), lpfc_mrq_create(9),
lpfc_eq_destroy(9), lpfc_cq_destroy(9), lpfc_mq_destroy(9),
lpfc_wq_destroy(9), lpfc_rq_destroy(9), lpfc_sli4_post_sgl(9),
lpfc_sli4_alloc_xri(9), __lpfc_sli4_free_xri(9), lpfc_sli4_free_xri(9),
lpfc_sli4_next_xritag(9), lpfc_sli4_post_sgl_list(9),
lpfc_sli4_post_io_sgl_block(9), lpfc_sli4_post_io_sgl_list(9),
lpfc_fc_frame_check(9), lpfc_fc_hdr_get_vfi(9),
lpfc_fc_frame_to_vport(9), lpfc_update_rcv_time_stamp(9),
lpfc_cleanup_rcv_buffers(9), lpfc_rcv_seq_check_edtov(9),
lpfc_fc_frame_add(9), lpfc_sli4_abort_partial_seq(9),
lpfc_sli4_abort_ulp_seq(9), lpfc_sli4_seq_abort_rsp_cmpl(9),
lpfc_sli4_xri_inrange(9), lpfc_sli4_seq_abort_rsp(9),
lpfc_sli4_handle_unsol_abort(9), lpfc_seq_complete(9), lpfc_prep_seq(9),
lpfc_sli4_handle_received_buffer(9), lpfc_sli4_post_all_rpi_hdrs(9),
lpfc_sli4_post_rpi_hdr(9), lpfc_sli4_alloc_rpi(9),
__lpfc_sli4_free_rpi(9), lpfc_sli4_free_rpi(9),
lpfc_sli4_remove_rpis(9), lpfc_sli4_resume_rpi(9),
lpfc_sli4_init_vpi(9), lpfc_mbx_cmpl_add_fcf_record(9),
lpfc_sli4_add_fcf_record(9), lpfc_sli4_build_dflt_fcf_record(9),
lpfc_sli4_fcf_scan_read_fcf_rec(9), lpfc_sli4_fcf_rr_read_fcf_rec(9),
lpfc_sli4_read_fcf_rec(9), lpfc_check_next_fcf_pri_level(9),
lpfc_sli4_fcf_rr_next_index_get(9), lpfc_sli4_fcf_rr_index_set(9),
lpfc_sli4_fcf_rr_index_clear(9), lpfc_mbx_cmpl_redisc_fcf_table(9),
lpfc_sli4_redisc_fcf_table(9), lpfc_sli4_fcf_dead_failthrough(9),
lpfc_sli_get_config_region23(9), lpfc_sli4_get_config_region23(9),
lpfc_sli_read_link_ste(9), lpfc_log_fw_write_cmpl(9), lpfc_wr_object(9),
lpfc_cleanup_pending_mbox(9), lpfc_drain_txq(9), lpfc_wqe_bpl2sgl(9),
lpfc_sli4_issue_wqe(9), lpfc_sli4_issue_abort_iotag(9),
lpfc_snapshot_mxp(9), lpfc_adjust_pvt_pool_count(9),
lpfc_adjust_high_watermark(9), lpfc_move_xri_pvt_to_pbl(9),
_lpfc_move_xri_pbl_to_pvt(9), lpfc_move_xri_pbl_to_pvt(9),
lpfc_keep_pvt_pool_above_lowwm(9), lpfc_release_io_buf(9),
lpfc_get_io_buf_from_private_pool(9),
lpfc_get_io_buf_from_expedite_pool(9),
lpfc_get_io_buf_from_multixri_pools(9), lpfc_get_io_buf(9),
lpfc_read_object(9), lpfc_get_sgl_per_hdwq(9), lpfc_put_sgl_per_hdwq(9),
lpfc_free_sgl_per_hdwq(9), lpfc_get_cmd_rsp_buf_per_hdwq(9),
lpfc_put_cmd_rsp_buf_per_hdwq(9), lpfc_free_cmd_rsp_buf_per_hdwq(9),
lpfc_sli_prep_wqe(9)
and that's the whole page, bestie π this one's straight outta ./drivers/scsi/lpfc and dated October 2026 β go handle some interrupts, you absolute icon πβ¨π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms