Commit f763946a authored by Oded Gabbay's avatar Oded Gabbay
Browse files

habanalabs: cast to u64 before shift > 31 bits



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: default avatarkernel test robot <lkp@intel.com>
Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent 2f55342c
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -6114,7 +6114,7 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u64 *mask,
		is_idle &= is_eng_idle;

		if (mask)
			*mask |= !is_eng_idle <<
			*mask |= ((u64) !is_eng_idle) <<
					(GAUDI_ENGINE_ID_DMA_0 + dma_id);
		if (s)
			seq_printf(s, fmt, dma_id,
@@ -6137,7 +6137,8 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u64 *mask,
		is_idle &= is_eng_idle;

		if (mask)
			*mask |= !is_eng_idle << (GAUDI_ENGINE_ID_TPC_0 + i);
			*mask |= ((u64) !is_eng_idle) <<
						(GAUDI_ENGINE_ID_TPC_0 + i);
		if (s)
			seq_printf(s, fmt, i,
				is_eng_idle ? "Y" : "N",
@@ -6165,7 +6166,8 @@ static bool gaudi_is_device_idle(struct hl_device *hdev, u64 *mask,
		is_idle &= is_eng_idle;

		if (mask)
			*mask |= !is_eng_idle << (GAUDI_ENGINE_ID_MME_0 + i);
			*mask |= ((u64) !is_eng_idle) <<
						(GAUDI_ENGINE_ID_MME_0 + i);
		if (s) {
			if (!is_slave)
				seq_printf(s, fmt, i,
+5 −3
Original line number Diff line number Diff line
@@ -5173,7 +5173,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, u64 *mask,
		is_idle &= is_eng_idle;

		if (mask)
			*mask |= !is_eng_idle << (GOYA_ENGINE_ID_DMA_0 + i);
			*mask |= ((u64) !is_eng_idle) <<
						(GOYA_ENGINE_ID_DMA_0 + i);
		if (s)
			seq_printf(s, dma_fmt, i, is_eng_idle ? "Y" : "N",
					qm_glbl_sts0, dma_core_sts0);
@@ -5196,7 +5197,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, u64 *mask,
		is_idle &= is_eng_idle;

		if (mask)
			*mask |= !is_eng_idle << (GOYA_ENGINE_ID_TPC_0 + i);
			*mask |= ((u64) !is_eng_idle) <<
						(GOYA_ENGINE_ID_TPC_0 + i);
		if (s)
			seq_printf(s, fmt, i, is_eng_idle ? "Y" : "N",
				qm_glbl_sts0, cmdq_glbl_sts0, tpc_cfg_sts);
@@ -5216,7 +5218,7 @@ static bool goya_is_device_idle(struct hl_device *hdev, u64 *mask,
	is_idle &= is_eng_idle;

	if (mask)
		*mask |= !is_eng_idle << GOYA_ENGINE_ID_MME_0;
		*mask |= ((u64) !is_eng_idle) << GOYA_ENGINE_ID_MME_0;
	if (s) {
		seq_printf(s, fmt, 0, is_eng_idle ? "Y" : "N", qm_glbl_sts0,
				cmdq_glbl_sts0, mme_arch_sts);