On 2022/01/07 0:32, John Garry wrote: > On 06/01/2022 13:03, Ajish.Koshy@xxxxxxxxxxxxx wrote: >>> only a specific vector and, also, why we check at all in >>> an interrupt handler. >> Here is my initial understanding so far based on the code >> and data sheet >> >> 1. Controller has the capability to communicate >> to the host about fatal error condition via configured >> interrupt vector MSI/MSI-X. >> 2. This capability is achieved by setting two fields >> a. Enable Controller Fatal error notification >> Dowrd 0x1C, Bit[0]. >> 1 - Enable; 0 - Disable >> Code: pm8001_ha->main_cfg_tbl.pm80xx_tbl. >> fatal_err_interrupt = 0x01; >> b. Fatal Error Interrupt Vector Dword 0x1C, bit[15:8] >> This parameter configures which interrupt vector >> is used to notify the host of the fatal error. >> Code: /* Update Fatal error interrupt vector */ >> pm8001_ha->main_cfg_tbl.pm80xx_tbl. >> fatal_err_interrupt |= >> ((pm8001_ha->max_q_num - 1) << 8); >> >> Probably this will be the reason why we check >> the vector in process_oq() for processing >> controller fatal error >> >> if (vec == (pm8001_ha->max_q_num - 1)) { >> >> Please do let me know if it helped in clarification. >> > > Sounds reasonable. And we only discover the issue for 8008/8009 now as > we have that (pm8001_ha->max_q_num - 1) vector being used for standard IO. > > So let me know of any other issue, otherwise I'll send a v2 with the > coding style fixup. And maybe add comments about the above so that the information does not get lost ? > > Thanks, > John -- Damien Le Moal Western Digital Research