mpi3mr_probe(9)
π NAME π
mpi3mr_probe β the PCI probe callback, aka the moment your driver first slides into the DMs of a shiny new PCI device π«Ά
(this one lives in section 9 of the Kernel API Manual, bestie β kernel internals only, no userland shenanigans)
β¨ SYNOPSIS β¨
int mpi3mr_probe (struct pci_dev *pdev , const struct pci_device_id *id
);
π ARGUMENTS π
pdevβ the PCI device instance. your actual main character device, the one we're probing πidβ the PCI device ID details. all the matching info about which device we're looking at β¨
πΈ DESCRIPTION πΈ
Okay so this is the controller initialization routine. mpi3mr_probe is literally where the controller gets its life together π₯
First thing it does: a vibe check on the controller's security status. And listen β if that status comes back invalid or tampered, probe just returns without initializing the controller. No init, no nothing, we're out π (yes, that's the dramatic part, do not skip it).
Otherwise? Full glow-up sequence, in order:
- allocate a per-adapter instance through
shost_privπ - initialize controller-specific data structures
- initialize the controller hardware
- add
shostto the SCSI subsystem, and now it's officially part of the group chat π
β RETURN β
0 on success, non-zero on failure. that's it, that's the whole return contract π
π¦ SEE ALSO π¦
Kernel file: ./drivers/scsi/mpi3mr/mpi3mr_os.c
And now the friend group, no cap β every single one of them, we don't leave a single bestie behind π
mpi3mr_host_tag_for_scmd(9),mpi3mr_scmd_from_host_tag(9),mpi3mr_clear_scmd_priv(9)mpi3mr_fwevt_free(9),mpi3mr_fwevt_get(9),mpi3mr_fwevt_put(9),mpi3mr_alloc_fwevt(9)mpi3mr_fwevt_add_to_list(9),mpi3mr_hdb_trigger_data_event(9),mpi3mr_fwevt_del_from_list(9)mpi3mr_dequeue_fwevt(9),mpi3mr_cancel_work(9),mpi3mr_cleanup_fwevt_list(9)mpi3mr_queue_qd_reduction_event(9),mpi3mr_invalidate_devhandles(9),mpi3mr_print_scmd(9)mpi3mr_flush_scmd(9),mpi3mr_count_dev_pending(9),mpi3mr_count_tgt_pending(9)mpi3mr_flush_host_io(9),mpi3mr_flush_cmds_for_unrecovered_controller(9)mpi3mr_alloc_tgtdev(9),mpi3mr_tgtdev_add_to_list(9),mpi3mr_tgtdev_del_from_list(9)__mpi3mr_get_tgtdev_by_handle(9),mpi3mr_get_tgtdev_by_handle(9)__mpi3mr_get_tgtdev_by_perst_id(9),mpi3mr_get_tgtdev_by_perst_id(9)__mpi3mr_get_tgtdev_from_tgtpriv(9),mpi3mr_set_io_divert_for_all_vd_in_tg(9)mpi3mr_print_device_event_notice(9),mpi3mr_remove_tgtdev_from_host(9)mpi3mr_report_tgtdev_to_host(9),mpi3mr_change_queue_depth(9)mpi3mr_update_sdev(9),mpi3mr_refresh_tgtdevs(9),mpi3mr_debug_dump_devpg0(9)mpi3mr_update_tgtdev(9),mpi3mr_devstatuschg_evt_bh(9),mpi3mr_devinfochg_evt_bh(9)mpi3mr_free_enclosure_list(9),mpi3mr_enclosure_find_by_handle(9)mpi3mr_process_trigger_data_event_bh(9),mpi3mr_encldev_add_chg_evt_debug(9)mpi3mr_encldev_add_chg_evt_bh(9),mpi3mr_sastopochg_evt_debug(9),mpi3mr_sastopochg_evt_bh(9)mpi3mr_pcietopochg_evt_debug(9),mpi3mr_pcietopochg_evt_bh(9),mpi3mr_logdata_evt_bh(9)mpi3mr_update_sdev_qd(9),mpi3mr_set_qd_for_all_vd_in_tg(9),mpi3mr_fwevt_bh(9)mpi3mr_fwevt_worker(9),mpi3mr_create_tgtdev(9),mpi3mr_flush_delayed_cmd_lists(9)mpi3mr_dev_rmhs_complete_iou(9),mpi3mr_dev_rmhs_complete_tm(9),mpi3mr_dev_rmhs_send_tm(9)mpi3mr_complete_evt_ack(9),mpi3mr_send_event_ack(9),mpi3mr_pcietopochg_evt_th(9)mpi3mr_sastopochg_evt_th(9),mpi3mr_devstatuschg_evt_th(9),mpi3mr_preparereset_evt_th(9)mpi3mr_energypackchg_evt_th(9),mpi3mr_cablemgmt_evt_th(9)mpi3mr_add_event_wait_for_device_refresh(9),mpi3mr_os_handle_events(9)mpi3mr_setup_eedp(9),mpi3mr_build_sense_buffer(9),mpi3mr_map_eedp_error(9)mpi3mr_process_op_reply_desc(9),mpi3mr_get_chain_idx(9),mpi3mr_prepare_sg_scmd(9)mpi3mr_build_sg_scmd(9),mpi3mr_tm_response_name(9),mpi3mr_issue_tm(9)mpi3mr_bios_param(9),mpi3mr_map_queues(9),mpi3mr_get_fw_pending_ios(9)mpi3mr_print_pending_host_io(9),mpi3mr_wait_for_host_io(9),mpi3mr_setup_divert_ws(9)mpi3mr_eh_host_reset(9),mpi3mr_eh_bus_reset(9),mpi3mr_eh_target_reset(9)mpi3mr_eh_dev_reset(9),mpi3mr_eh_abort(9),mpi3mr_scan_start(9),mpi3mr_scan_finished(9)mpi3mr_sdev_destroy(9),mpi3mr_target_destroy(9),mpi3mr_sdev_configure(9)mpi3mr_sdev_init(9),mpi3mr_target_alloc(9),mpi3mr_check_return_unmap(9)mpi3mr_allow_scmd_to_fw(9),mpi3mr_qcmd(9),mpi3mr_init_drv_cmd(9)osintfc_mrioc_security_status(9),mpi3mr_remove(9),mpi3mr_shutdown(9)mpi3mr_suspend(9),mpi3mr_resume(9),mpi3mr_pcierr_error_detected(9)mpi3mr_pcierr_slot_reset(9),mpi3mr_pcierr_resume(9),mpi3mr_pcierr_mmio_enabled(9)
okay that's the whole page, go read the actual source bestie ily π
source path: ./drivers/scsi/mpi3mr Β· dated October 2026 Β· that's the mpi3mr_probe(9) page, periodt πβ¨
π¦ 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