On Wed, Jul 16, 2025 at 02:45:06PM -0300, Jason Gunthorpe wrote: > On Wed, Jul 16, 2025 at 10:35:25AM -0700, Nicolin Chen wrote: > > On Wed, Jul 16, 2025 at 08:51:23AM -0300, Jason Gunthorpe wrote: > > > On Tue, Jul 15, 2025 at 07:57:57PM -0700, Nicolin Chen wrote: > > > > > + val = FIELD_EX32(s_accel->info.idr[5], IDR5, GRAN4K); > > > > > + if (val < FIELD_EX32(s->idr[5], IDR5, GRAN4K)) { > > > > > + s->idr[5] = FIELD_DP32(s->idr[5], IDR5, GRAN4K, val); > > > > > + } > > > > > + val = FIELD_EX32(s_accel->info.idr[5], IDR5, GRAN16K); > > > > > + if (val < FIELD_EX32(s->idr[5], IDR5, GRAN16K)) { > > > > > + s->idr[5] = FIELD_DP32(s->idr[5], IDR5, GRAN16K, val); > > > > > + } > > > > > + val = FIELD_EX32(s_accel->info.idr[5], IDR5, GRAN64K); > > > > > + if (val < FIELD_EX32(s->idr[5], IDR5, GRAN64K)) { > > > > > + s->idr[5] = FIELD_DP32(s->idr[5], IDR5, GRAN64K, val); > > > > > > > > Unless there is some conflicts between the QEMU emulation and the > > > > SMMU HW, I think we should probably just override these fields to > > > > the HW values, > > > > > > The qemu model should be fully independent of the underlying HW, it > > > should not override from HW. > > > > > > It should check if the underlying supports the model and fail if it > > > doesn't. > > > > For every bit? If there is a conflict at a certain field (e.g. > > VMM only supports little endian while HW supports big endian), > > it must fail. > > Yes every bit. > > > But here, I mean for these specific fields such as GRANxK and > > RIL (range-based invalidation), we should override them with > > the HW values. Otherwise, the guest OS seeing RIL for example > > will issue TLBI commands that the host can't support. Right? > > No. > > If the SMMU model does not include RIL then RIL is not available to > the guest. > > If the SMMU model only supports GRAN4K, then the guest only uses 4k. > > This exactness is critical for live migration. We cannot have the IDRs > change during live migration. > > So there should be some built in models in qemu that define exactly > what kind of SMMU you get, and things like if 4k/16k/64k or RIL are > included in that model or not should be command line parameters/etc > like everything else in qemu..
OK. I see your point. That will leads to a very long list of parameters. So, a vSMMU model is defined following the parameters in the command line. A device (and its attaching SMMU HW) that's not compatibile should just fail the cold-plug at the beginning. Then, it shouldn't run into any problem that I encountered. Thanks Nicolin