[Nouveau] [bug report] drm/nouveau/fb/gf100-: rework ram detection
Dan Carpenter
dan.carpenter at oracle.com
Tue Mar 14 07:50:01 UTC 2017
Hello Ben Skeggs,
The patch 97e5268d57bb: "drm/nouveau/fb/gf100-: rework ram detection"
from Mar 2, 2017, leads to the following static checker warning:
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c:592 gf100_ram_ctor()
warn: should 'size << 20' be a 64 bit type?
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
572 gf100_ram_ctor(const struct nvkm_ram_func *func, struct nvkm_fb *fb,
573 struct nvkm_ram *ram)
574 {
575 struct nvkm_subdev *subdev = &fb->subdev;
576 struct nvkm_device *device = subdev->device;
577 struct nvkm_bios *bios = device->bios;
578 const u32 rsvd_head = ( 256 * 1024); /* vga memory */
579 const u32 rsvd_tail = (1024 * 1024); /* vbios etc */
580 enum nvkm_ram_type type = nvkm_fb_bios_memtype(bios);
581 u32 fbps = nvkm_rd32(device, 0x022438);
582 u64 total = 0, lcomm = ~0, lower, ubase, usize;
^^^^^^^^^^^^^
It's a u64.
583 int ret, fbp, ltcs, ltcn = 0;
584
585 nvkm_debug(subdev, "%d FBP(s)\n", fbps);
586 for (fbp = 0; fbp < fbps; fbp++) {
587 u32 size = func->probe_fbp(func, device, fbp, <cs);
^^^^^^^^
This is a u32.
588 if (size) {
589 nvkm_debug(subdev, "FBP %d: %4d MiB, %d LTC(s)\n",
590 fbp, size, ltcs);
591 lcomm = min(lcomm, (u64)(size / ltcs) << 20);
592 total += size << 20;
^^^^^^^^^^
I don't know if this shift can overflow or not?
593 ltcn += ltcs;
594 } else {
595 nvkm_debug(subdev, "FBP %d: disabled\n", fbp);
596 }
597 }
598
599 lower = lcomm * ltcn;
600 ubase = lcomm + func->upper;
601 usize = total - lower;
602
603 nvkm_debug(subdev, "Lower: %4lld MiB @ %010llx\n", lower >> 20, 0ULL);
604 nvkm_debug(subdev, "Upper: %4lld MiB @ %010llx\n", usize >> 20, ubase);
605 nvkm_debug(subdev, "Total: %4lld MiB\n", total >> 20);
606
607 ret = nvkm_ram_ctor(func, fb, type, total, 0, ram);
608 if (ret)
609 return ret;
610
611 nvkm_mm_fini(&ram->vram);
612
regards,
dan carpenter
More information about the Nouveau
mailing list