⬢ DragonFlyBSD Kernel Audit
DF-5084 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/radeon/radeon_agp.c
+++ b/sys/dev/drm/radeon/radeon_agp.c
@@ -149,14 +149,17 @@ int radeon_agp_init(struct radeon_device *rdev)
 	ret = drm_agp_info(rdev->ddev, &info);
 	if (ret) {
 		drm_agp_release(rdev->ddev);
 		DRM_ERROR("Unable to get AGP info: %d\n", ret);
 		return ret;
 	}
 
-	if (rdev->ddev->agp->agp_info.ai_aperture_size < 32) {
+	/* DragonFly's agp_info.ai_aperture_size is in BYTES
+	 * (sys/dev/agp/agp.c: agp_get_info() -> rman_get_size()), not MB as in
+	 * the old Linux agp_kern_info this file was ported from. */
+	if (rdev->ddev->agp->agp_info.ai_aperture_size < (32U << 20)) {
 		drm_agp_release(rdev->ddev);
 		dev_warn(rdev->dev, "AGP aperture too small (%juM) "
 			"need at least 32M, disabling AGP\n",
-			rdev->ddev->agp->agp_info.ai_aperture_size);
+			(uintmax_t)(rdev->ddev->agp->agp_info.ai_aperture_size >> 20));
 		return -EINVAL;
 	}
@@ -242,7 +245,7 @@ int radeon_agp_init(struct radeon_device *rdev)
 	}
 
 	rdev->mc.agp_base = rdev->ddev->agp->agp_info.ai_aperture_base;
-	rdev->mc.gtt_size = rdev->ddev->agp->agp_info.ai_aperture_size << 20;
+	rdev->mc.gtt_size = rdev->ddev->agp->agp_info.ai_aperture_size;
 	rdev->mc.gtt_start = rdev->mc.agp_base;
 	rdev->mc.gtt_end = rdev->mc.gtt_start + rdev->mc.gtt_size - 1;
 	dev_info(rdev->dev, "GTT: %juM 0x%08jX - 0x%08jX\n",