DragonFlyBSD Kernel Audit
DF-1937 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/radeon/rv730_dpm.c b/sys/dev/drm/radeon/rv730_dpm.c
--- a/sys/dev/drm/radeon/rv730_dpm.c
+++ b/sys/dev/drm/radeon/rv730_dpm.c
@@ -94,8 +94,8 @@
 
 		if (radeon_atombios_get_asic_ss_info(rdev, &ss,
 						     ASIC_INTERNAL_ENGINE_SS, vco_freq)) {
-			u32 clk_s = reference_clock * 5 / (reference_divider * ss.rate);
-			u32 clk_v = ss.percentage * fbdiv / (clk_s * 10000);
+			u32 clk_s = (ss.rate == 0) ? 0 : reference_clock * 5 / (reference_divider * ss.rate);
+			u32 clk_v = (clk_s == 0) ? 0 : ss.percentage * fbdiv / (clk_s * 10000);
 
 			cg_spll_spread_spectrum &= ~CLK_S_MASK;
 			cg_spll_spread_spectrum |= CLK_S(clk_s);
@@ -170,8 +170,8 @@
 		if (radeon_atombios_get_asic_ss_info(rdev, &ss,
 						     ASIC_INTERNAL_MEMORY_SS, vco_freq)) {
 			u32 reference_clock = rdev->clock.mpll.reference_freq;
-			u32 clk_s = reference_clock * 5 / (reference_divider * ss.rate);
-			u32 clk_v = ss.percentage * dividers.fb_div / (clk_s * 10000);
+			u32 clk_s = (ss.rate == 0) ? 0 : reference_clock * 5 / (reference_divider * ss.rate);
+			u32 clk_v = (clk_s == 0) ? 0 : ss.percentage * dividers.fb_div / (clk_s * 10000);
 
 			mpll_ss &= ~CLK_S_MASK;
 			mpll_ss |= CLK_S(clk_s);