mpi3mr_cfg_get_sas_exp_pg1(9)
π NAME π
mpi3mr_cfg_get_sas_exp_pg1 β bestie, this is literally the handler that reads the current SAS Expander page1 β¨
π SYNOPSIS π
int mpi3mr_cfg_get_sas_exp_pg1 (struct mpi3mr_ioc *mrioc , u16
*ioc_status , struct mpi3_sas_expander_page1 *exp_pg1 , u16 pg_sz , u32
form , u32 form_spec );
π¦ ARGUMENTS π¦
mriocβ your adapter instance reference, aka the whole personality in question π«Άioc_statusβ a pointer so we can hand back the ioc status, no capexp_pg1β a pointer where the SAS Expander page 1 comes home to live πpg_szβ the size of the memory you allocated for that page pointer, so like, tell it how much room it's gotformβ the form to be used for addressing the page, iykykform_specβ form-specific info, like the phy number πΈ
π DESCRIPTION π
Okay so this is the config page read handler for a specific SAS Expander page1. Like, that specific one. π
The ioc_status holds the controller-returned ioc status. Now here's the part where you need to pay attention, bestie: this routine does not check ioc_status to decide whether the page read succeeded or not. That vibe check is entirely the caller's responsibility β it's giving main character energy and you're the main character. π
β RETURN β
0 on success, non-zero on failure. Simple as that, fr fr. π
π₯ SEE ALSO π₯
Kernel file ./drivers/scsi/mpi3mr/mpi3mr_fw.c and honestly the whole extended friend group:
mpi3mr_get_reply_desc(9)mpi3mr_process_op_reply_q(9)mpi3mr_blk_mq_poll(9)mpi3mr_isr_poll(9)mpi3mr_request_irq(9)mpi3mr_setup_isr(9)mpi3mr_reset_rc_name(9)mpi3mr_reset_type_name(9)mpi3mr_is_fault_recoverable(9)mpi3mr_print_fault_info(9)mpi3mr_save_fault_info(9)mpi3mr_get_iocstate(9)mpi3mr_free_ioctl_dma_memory(9)mpi3mr_alloc_ioctl_dma_memory(9)mpi3mr_fault_uevent_emit(9)mpi3mr_clear_reset_history(9)mpi3mr_issue_and_process_mur(9)mpi3mr_revalidate_factsdata(9)mpi3mr_bring_ioc_ready(9)mpi3mr_soft_reset_success(9)mpi3mr_diagfault_success(9)mpi3mr_set_diagsave(9)mpi3mr_issue_reset(9)mpi3mr_admin_request_post(9)mpi3mr_free_op_req_q_segments(9)mpi3mr_free_op_reply_q_segments(9)mpi3mr_delete_op_reply_q(9)mpi3mr_alloc_op_reply_q_segments(9)mpi3mr_alloc_op_req_q_segments(9)mpi3mr_create_op_reply_q(9)mpi3mr_create_op_req_q(9)mpi3mr_create_op_queues(9)mpi3mr_op_request_post(9)mpi3mr_check_rh_fault_ioc(9)mpi3mr_sync_timestamp(9)mpi3mr_print_pkg_ver(9)mpi3mr_watchdog_work(9)mpi3mr_start_watchdog(9)mpi3mr_stop_watchdog(9)mpi3mr_setup_admin_qpair(9)mpi3mr_issue_iocfacts(9)mpi3mr_check_reset_dma_mask(9)mpi3mr_process_factsdata(9)mpi3mr_alloc_reply_sense_bufs(9)mpimr_initialize_reply_sbuf_queues(9)mpi3mr_issue_iocinit(9)mpi3mr_unmask_events(9)mpi3mr_issue_event_notification(9)mpi3mr_process_event_ack(9)mpi3mr_alloc_chain_bufs(9)mpi3mr_port_enable_complete(9)mpi3mr_issue_port_enable(9)mpi3mr_repost_diag_bufs(9)mpi3mr_read_tsu_interval(9)mpi3mr_print_ioc_info(9)mpi3mr_cleanup_resources(9)mpi3mr_setup_resources(9)mpi3mr_enable_events(9)mpi3mr_init_ioc(9)mpi3mr_reinit_ioc(9)mpi3mr_memset_op_reply_q_buffers(9)mpi3mr_memset_op_req_q_buffers(9)mpi3mr_memset_buffers(9)mpi3mr_free_mem(9)mpi3mr_issue_ioc_shutdown(9)mpi3mr_cleanup_ioc(9)mpi3mr_drv_cmd_comp_reset(9)mpi3mr_flush_drv_cmds(9)mpi3mr_pel_wait_post(9)mpi3mr_pel_get_seqnum_post(9)mpi3mr_pel_wait_complete(9)mpi3mr_pel_get_seqnum_complete(9)mpi3mr_check_op_admin_proc(9)mpi3mr_soft_reset_handler(9)mpi3mr_post_cfg_req(9)mpi3mr_process_cfg_req(9)mpi3mr_cfg_get_dev_pg0(9)mpi3mr_cfg_get_sas_phy_pg0(9)mpi3mr_cfg_get_sas_phy_pg1(9)mpi3mr_cfg_get_sas_exp_pg0(9)mpi3mr_cfg_get_enclosure_pg0(9)mpi3mr_cfg_get_sas_io_unit_pg0(9)mpi3mr_cfg_get_sas_io_unit_pg1(9)mpi3mr_cfg_set_sas_io_unit_pg1(9)mpi3mr_cfg_get_driver_pg1(9)mpi3mr_cfg_get_driver_pg2(9)
okay that's the whole page, you ate that π β¨
This little gem lives over at ./drivers/scsi/mpi3mr, dated October 2026 β screenshot it, cite it, frame it, whatever, it's iconic ππ¦π
π¦ 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