Index: sys/arch/arm/cortex/gicv3_its.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/cortex/gicv3_its.c,v retrieving revision 1.41 diff -u -p -r1.41 gicv3_its.c --- sys/arch/arm/cortex/gicv3_its.c 28 Jan 2025 21:20:45 -0000 1.41 +++ sys/arch/arm/cortex/gicv3_its.c 30 Apr 2026 10:15:19 -0000 @@ -191,7 +191,8 @@ gits_command_mapd(struct gicv3_its *its, memset(&cmd, 0, sizeof(cmd)); cmd.dw[0] = GITS_CMD_MAPD | ((uint64_t)deviceid << 32); if (v) { - cmd.dw[1] = uimax(1, size) - 1; + KASSERT(size >= 1); + cmd.dw[1] = size - 1; cmd.dw[2] = itt_addr | __BIT(63); } @@ -409,9 +410,12 @@ gicv3_its_device_map(struct gicv3_its *i while (!powerof2(vectors)) vectors++; + KASSERT(vectors >= 2); + KASSERT(powerof2(vectors)); + const uint64_t typer = gits_read_8(its, GITS_TYPER); const u_int itt_entry_size = __SHIFTOUT(typer, GITS_TYPER_ITT_entry_size) + 1; - const u_int itt_size = roundup(uimax(vectors, 2) * itt_entry_size, GITS_ITT_ALIGN); + const u_int itt_size = roundup(vectors * itt_entry_size, GITS_ITT_ALIGN); LIST_FOREACH(dev, &its->its_devices, dev_list) if (dev->dev_id == devid) { @@ -461,7 +465,7 @@ gicv3_its_device_map(struct gicv3_its *i /* * Map the device to the ITT */ - const u_int size = __SHIFTOUT(typer, GITS_TYPER_ID_bits) + 1; + const u_int size = fls32(vectors); mutex_enter(its->its_lock); error = gits_command_mapd(its, devid, dev->dev_itt.segs[0].ds_addr, size, true); if (error == 0) {