@@ -386,7 +386,7 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, __le32 *dbbuf_db,
386386 * as it only leads to a small amount of wasted memory for the lifetime of
387387 * the I/O.
388388 */
389- static int nvme_pci_npages_prp (void )
389+ static __always_inline int nvme_pci_npages_prp (void )
390390{
391391 unsigned max_bytes = (NVME_MAX_KB_SZ * 1024 ) + NVME_CTRL_PAGE_SIZE ;
392392 unsigned nprps = DIV_ROUND_UP (max_bytes , NVME_CTRL_PAGE_SIZE );
@@ -1107,7 +1107,9 @@ static void nvme_poll_irqdisable(struct nvme_queue *nvmeq)
11071107 WARN_ON_ONCE (test_bit (NVMEQ_POLLED , & nvmeq -> flags ));
11081108
11091109 disable_irq (pci_irq_vector (pdev , nvmeq -> cq_vector ));
1110+ spin_lock (& nvmeq -> cq_poll_lock );
11101111 nvme_poll_cq (nvmeq , NULL );
1112+ spin_unlock (& nvmeq -> cq_poll_lock );
11111113 enable_irq (pci_irq_vector (pdev , nvmeq -> cq_vector ));
11121114}
11131115
@@ -3459,7 +3461,7 @@ static pci_ers_result_t nvme_slot_reset(struct pci_dev *pdev)
34593461
34603462 dev_info (dev -> ctrl .device , "restart after slot reset\n" );
34613463 pci_restore_state (pdev );
3462- if (! nvme_try_sched_reset (& dev -> ctrl ))
3464+ if (nvme_try_sched_reset (& dev -> ctrl ))
34633465 nvme_unquiesce_io_queues (& dev -> ctrl );
34643466 return PCI_ERS_RESULT_RECOVERED ;
34653467}
@@ -3532,6 +3534,9 @@ static const struct pci_device_id nvme_id_table[] = {
35323534 .driver_data = NVME_QUIRK_BOGUS_NID , },
35333535 { PCI_DEVICE (0x15b7 , 0x5008 ), /* Sandisk SN530 */
35343536 .driver_data = NVME_QUIRK_BROKEN_MSI },
3537+ { PCI_DEVICE (0x15b7 , 0x5009 ), /* Sandisk SN550 */
3538+ .driver_data = NVME_QUIRK_BROKEN_MSI |
3539+ NVME_QUIRK_NO_DEEPEST_PS },
35353540 { PCI_DEVICE (0x1987 , 0x5012 ), /* Phison E12 */
35363541 .driver_data = NVME_QUIRK_BOGUS_NID , },
35373542 { PCI_DEVICE (0x1987 , 0x5016 ), /* Phison E16 */
0 commit comments