On Wed, May 17, 2023 at 11:08:12AM +0800, Liu, Jingqi wrote: > > + /* > > + * All drivers support IOMMU_HWPT_TYPE_DEFAULT, so pass it through. > > + * For any other hwpt_type, check the ops->domain_alloc_user_data_len > > + * presence and its result. > > + */ > > + if (cmd->hwpt_type != IOMMU_HWPT_TYPE_DEFAULT) { > > + if (!ops->domain_alloc_user_data_len) { > > + rc = -EOPNOTSUPP; > > + goto out_put_idev; > > + } > > + klen = ops->domain_alloc_user_data_len(cmd->hwpt_type); > > + if (WARN_ON(klen < 0)) { > > + rc = -EINVAL; > > + goto out_put_pt; > > + } > Would it be better if the later check "klen" is moved here ? > if (klen) { > [...] > } > If this check fails here, there's no need to execute the code after it. > If this path is not executed, "klen" is 0, and there's no need to check it. > Do I understand it right ? Makes sense. And the klen value isn't really being used. So, we may likely change it to a bool one. Also, I'm thinking of forcing a !!cmd->data_len for a non-DEFAULT hwpt_type: + if (cmd->hwpt_type != IOMMU_HWPT_TYPE_DEFAULT) { + if (!cmd->data_len) { + rc = -EINVAL; + goto out_put_pt; + } + if (!ops->domain_alloc_user_data_len) { + rc = -EOPNOTSUPP; + goto out_put_pt; + } + if (!ops->hwpt_type_is_supported(cmd->hwpt_type)) { + rc = -EINVAL; + goto out_put_pt; + } Then, for the latter part, simply: + if (cmd->data_len) { + // malloc data + } Thanks Nic