Skip to content

Commit eb46fbc

Browse files
ogabbaygregkh
authored andcommitted
habanalabs: cast to u64 before shift > 31 bits
[ Upstream commit f763946 ] When shifting a boolean variable by more than 31 bits and putting the result into a u64 variable, we need to cast the boolean into unsigned 64 bits to prevent possible overflow. Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 411df17 commit eb46fbc

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

drivers/misc/habanalabs/gaudi/gaudi.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6099,7 +6099,7 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u32 *mask,
60996099
is_idle &= is_eng_idle;
61006100

61016101
if (mask)
6102-
*mask |= !is_eng_idle <<
6102+
*mask |= ((u64) !is_eng_idle) <<
61036103
(GAUDI_ENGINE_ID_DMA_0 + dma_id);
61046104
if (s)
61056105
seq_printf(s, fmt, dma_id,
@@ -6122,7 +6122,8 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u32 *mask,
61226122
is_idle &= is_eng_idle;
61236123

61246124
if (mask)
6125-
*mask |= !is_eng_idle << (GAUDI_ENGINE_ID_TPC_0 + i);
6125+
*mask |= ((u64) !is_eng_idle) <<
6126+
(GAUDI_ENGINE_ID_TPC_0 + i);
61266127
if (s)
61276128
seq_printf(s, fmt, i,
61286129
is_eng_idle ? "Y" : "N",
@@ -6150,7 +6151,8 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u32 *mask,
61506151
is_idle &= is_eng_idle;
61516152

61526153
if (mask)
6153-
*mask |= !is_eng_idle << (GAUDI_ENGINE_ID_MME_0 + i);
6154+
*mask |= ((u64) !is_eng_idle) <<
6155+
(GAUDI_ENGINE_ID_MME_0 + i);
61546156
if (s) {
61556157
if (!is_slave)
61566158
seq_printf(s, fmt, i,

drivers/misc/habanalabs/goya/goya.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5166,7 +5166,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, u32 *mask,
51665166
is_idle &= is_eng_idle;
51675167

51685168
if (mask)
5169-
*mask |= !is_eng_idle << (GOYA_ENGINE_ID_DMA_0 + i);
5169+
*mask |= ((u64) !is_eng_idle) <<
5170+
(GOYA_ENGINE_ID_DMA_0 + i);
51705171
if (s)
51715172
seq_printf(s, dma_fmt, i, is_eng_idle ? "Y" : "N",
51725173
qm_glbl_sts0, dma_core_sts0);
@@ -5189,7 +5190,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, u32 *mask,
51895190
is_idle &= is_eng_idle;
51905191

51915192
if (mask)
5192-
*mask |= !is_eng_idle << (GOYA_ENGINE_ID_TPC_0 + i);
5193+
*mask |= ((u64) !is_eng_idle) <<
5194+
(GOYA_ENGINE_ID_TPC_0 + i);
51935195
if (s)
51945196
seq_printf(s, fmt, i, is_eng_idle ? "Y" : "N",
51955197
qm_glbl_sts0, cmdq_glbl_sts0, tpc_cfg_sts);
@@ -5209,7 +5211,7 @@ static bool goya_is_device_idle(struct hl_device *hdev, u32 *mask,
52095211
is_idle &= is_eng_idle;
52105212

52115213
if (mask)
5212-
*mask |= !is_eng_idle << GOYA_ENGINE_ID_MME_0;
5214+
*mask |= ((u64) !is_eng_idle) << GOYA_ENGINE_ID_MME_0;
52135215
if (s) {
52145216
seq_printf(s, fmt, 0, is_eng_idle ? "Y" : "N", qm_glbl_sts0,
52155217
cmdq_glbl_sts0, mme_arch_sts);

0 commit comments

Comments
 (0)