tree:   https://github.com/HabanaAI/linux.git habanalabs-next
head:   eb5cb5d380ac735874da3b555f4c8ab6ea814c90
commit: eb5cb5d380ac735874da3b555f4c8ab6ea814c90 [17/17] habanalabs: extend 
busy engines mask to 64 bits
config: x86_64-randconfig-m001-20200820 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/misc/habanalabs/gaudi/gaudi.c:6077 gaudi_is_device_idle() warn: should 
'!is_eng_idle << (0 + dma_id)' be a 64 bit type?

# 
https://github.com/HabanaAI/linux/commit/eb5cb5d380ac735874da3b555f4c8ab6ea814c90
git remote add habanaai https://github.com/HabanaAI/linux.git
git fetch --no-tags habanaai habanalabs-next
git checkout eb5cb5d380ac735874da3b555f4c8ab6ea814c90
vim +6077 drivers/misc/habanalabs/gaudi/gaudi.c

eb5cb5d380ac735 farah kassabri 2020-08-12  6044  static bool 
gaudi_is_device_idle(struct hl_device *hdev, u64 *mask,
                                                                                
                          ^^^^^^^^^
This is now 64 bit.

ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6045                                 
        struct seq_file *s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6046  {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6047         struct gaudi_device 
*gaudi = hdev->asic_specific;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6048         const char *fmt = 
"%-5d%-9s%#-14x%#-12x%#x\n";
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6049         const char 
*mme_slave_fmt = "%-5d%-9s%-14s%-12s%#x\n";
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6050         u32 qm_glbl_sts0, 
qm_cgm_sts, dma_core_sts0, tpc_cfg_sts, mme_arch_sts;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6051         bool is_idle = true, 
is_eng_idle, is_slave;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6052         u64 offset;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6053         int i, dma_id;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6054  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6055         
mutex_lock(&gaudi->clk_gate_mutex);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6056  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6057         
hdev->asic_funcs->disable_clock_gating(hdev);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6058  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6059         if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6060                 seq_puts(s,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6061                         "\nDMA  
is_idle  QM_GLBL_STS0  QM_CGM_STS  DMA_CORE_STS0\n"
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6062                         "---  
-------  ------------  ----------  -------------\n");
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6063  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6064         for (i = 0 ; i < 
DMA_NUMBER_OF_CHNLS ; i++) {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6065                 dma_id = 
gaudi_dma_assignment[i];
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6066                 offset = dma_id 
* DMA_QMAN_OFFSET;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6067  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6068                 qm_glbl_sts0 = 
RREG32(mmDMA0_QM_GLBL_STS0 + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6069                 qm_cgm_sts = 
RREG32(mmDMA0_QM_CGM_STS + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6070                 dma_core_sts0 = 
RREG32(mmDMA0_CORE_STS0 + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6071                 is_eng_idle = 
IS_QM_IDLE(qm_glbl_sts0, qm_cgm_sts) &&
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6072                                 
IS_DMA_IDLE(dma_core_sts0);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6073                 is_idle &= 
is_eng_idle;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6074  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6075                 if (mask)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6076                         *mask 
|= !is_eng_idle <<
ac0ae6a96aa58ee Oded Gabbay    2020-05-11 @6077                                 
        (GAUDI_ENGINE_ID_DMA_0 + dma_id);

So this needs to be:

        *mask |= (u64)s_eng_idle << (GAUDI_ENGINE_ID_DMA_0 + dma_id);

to prevent shift wrapping.  Smatch doesn't know the value of dma_id.

ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6078                 if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6079                         
seq_printf(s, fmt, dma_id,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6080                                 
is_eng_idle ? "Y" : "N", qm_glbl_sts0,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6081                                 
qm_cgm_sts, dma_core_sts0);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6082         }
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6083  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6084         if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6085                 seq_puts(s,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6086                         "\nTPC  
is_idle  QM_GLBL_STS0  QM_CGM_STS  CFG_STATUS\n"
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6087                         "---  
-------  ------------  ----------  ----------\n");
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6088  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6089         for (i = 0 ; i < 
TPC_NUMBER_OF_ENGINES ; i++) {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6090                 offset = i * 
TPC_QMAN_OFFSET;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6091                 qm_glbl_sts0 = 
RREG32(mmTPC0_QM_GLBL_STS0 + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6092                 qm_cgm_sts = 
RREG32(mmTPC0_QM_CGM_STS + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6093                 tpc_cfg_sts = 
RREG32(mmTPC0_CFG_STATUS + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6094                 is_eng_idle = 
IS_QM_IDLE(qm_glbl_sts0, qm_cgm_sts) &&
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6095                                 
IS_TPC_IDLE(tpc_cfg_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6096                 is_idle &= 
is_eng_idle;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6097  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6098                 if (mask)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6099                         *mask 
|= !is_eng_idle << (GAUDI_ENGINE_ID_TPC_0 + i);

Presumably Smatch knows that TPC_NUMBER_OF_ENGINES + GAUDI_ENGINE_ID_TPC_0
is less than 31.

ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6100                 if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6101                         
seq_printf(s, fmt, i,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6102                                 
is_eng_idle ? "Y" : "N",
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6103                                 
qm_glbl_sts0, qm_cgm_sts, tpc_cfg_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6104         }
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6105  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6106         if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6107                 seq_puts(s,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6108                         "\nMME  
is_idle  QM_GLBL_STS0  QM_CGM_STS  ARCH_STATUS\n"
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6109                         "---  
-------  ------------  ----------  -----------\n");
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6110  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6111         for (i = 0 ; i < 
MME_NUMBER_OF_ENGINES ; i++) {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6112                 offset = i * 
MME_QMAN_OFFSET;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6113                 mme_arch_sts = 
RREG32(mmMME0_CTRL_ARCH_STATUS + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6114                 is_eng_idle = 
IS_MME_IDLE(mme_arch_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6115  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6116                 /* MME 1 & 3 
are slaves, no need to check their QMANs */
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6117                 is_slave = i % 
2;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6118                 if (!is_slave) {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6119                         
qm_glbl_sts0 = RREG32(mmMME0_QM_GLBL_STS0 + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6120                         
qm_cgm_sts = RREG32(mmMME0_QM_CGM_STS + offset);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6121                         
is_eng_idle &= IS_QM_IDLE(qm_glbl_sts0, qm_cgm_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6122                 }
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6123  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6124                 is_idle &= 
is_eng_idle;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6125  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6126                 if (mask)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6127                         *mask 
|= !is_eng_idle << (GAUDI_ENGINE_ID_MME_0 + i);



ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6128                 if (s) {
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6129                         if 
(!is_slave)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6130                                 
seq_printf(s, fmt, i,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6131                                 
        is_eng_idle ? "Y" : "N",
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6132                                 
        qm_glbl_sts0, qm_cgm_sts, mme_arch_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6133                         else
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6134                                 
seq_printf(s, mme_slave_fmt, i,
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6135                                 
        is_eng_idle ? "Y" : "N", "-",
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6136                                 
        "-", mme_arch_sts);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6137                 }
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6138         }
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6139  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6140         if (s)
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6141                 seq_puts(s, 
"\n");
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6142  
e38bfd30e08802d Oded Gabbay    2020-07-03  6143         
hdev->asic_funcs->set_clock_gating(hdev);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6144  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6145         
mutex_unlock(&gaudi->clk_gate_mutex);
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6146  
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6147         return is_idle;
ac0ae6a96aa58ee Oded Gabbay    2020-05-11  6148  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to