Re: [Question mpam mpam/snapshot+extras/v6.18-rc1] Question with Configuring iommu_group in 'task'

From: Ben Horgan

Date: Mon Apr 13 2026 - 11:03:11 EST


Hi Qinxin,

On 4/3/26 03:44, Qinxin Xia wrote:
>
>
> On 2026/3/27 18:47:49, Ben Horgan <ben.horgan@xxxxxxx> wrote:
>> Hi Qinxin,
>>
>> On 3/27/26 10:21, Qinxin Xia wrote:
>>>
>>> Hello everyone!
>>>
>>> In earlier versions, mpam supports the configuration of iommu_groups.
>>>
>>>   823 static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of,
>>>   824                                     char *buf, size_t nbytes,
>>> loff_t off)
>>>   825 {
>>>   826         struct rdtgroup *rdtgrp;
>>>   827         int iommu_group_id;
>>>   828         bool is_iommu;
>>>   829         char *pid_str;
>>>   830         int ret = 0;
>>>   831         pid_t pid;
>>>   832
>>>   833         rdtgrp = rdtgroup_kn_lock_live(of->kn);
>>>   834         if (!rdtgrp) {
>>>   835                 rdtgroup_kn_unlock(of->kn);
>>>   836                 return -ENOENT;
>>>   837         }
>>>   838         rdt_last_cmd_clear();
>>>   839
>>>   840         if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED ||
>>>   841             rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
>>>   842                 ret = -EINVAL;
>>>   843                 rdt_last_cmd_puts("Pseudo-locking in progress\n");
>>>   844                 goto unlock;
>>>   845         }
>>>   846
>>>   847         while (buf && buf[0] != '\0' && buf[0] != '\n') {
>>>   848                 pid_str = strim(strsep(&buf, ","));
>>>   849
>>>   850                 is_iommu = string_is_iommu_group(pid_str, &iommu_group_id);
>>>
>>> What puzzles me is why we would put it under 'task'—this seems a little
>>>   strange to users.It seems they are not related.Why don't we add a new
>>> interface like 'iommu'?
>>
>> I think it is likely that this interface would change if upstream support is added.
>>
>
> I have done some work in this direction before, and I will release an
> RFC later for further discussion.:-)

Looking forward to seeing it.

Ben

>
>>>
>>>   851                 if (is_iommu)
>>>   852                         ret = rdtgroup_move_iommu(iommu_group_id, rdtgrp, of);
>>>   853                 else if (kstrtoint(pid_str, 0, &pid)) {
>>>   854                         rdt_last_cmd_printf("Task list parsing error pid %s\n", pid_str);
>>>   855                         ret = -EINVAL;
>>>   856                         break;
>>>   857                 }
>>>   858
>>>   859                 if (pid < 0) {
>>>   860                         rdt_last_cmd_printf("Invalid pid %d\n", pid);
>>>   861                         ret = -EINVAL;
>>>   862                         break;
>>>   863                 }
>>>   864
>>>
>>> In future glue versions, will you re-enable support for iommu_group, and
>>> if so, will the configuration scheme be changed?
>>
>> Please can you let us know about your usecase so that we can get more information to decide
>> what the best interface would be?
>>
>> Thanks,
>>
>> Ben
>>
>>
>>
>
> We want to use the iommu mpam to implement stream control for different
> PCIe devices. By limiting the access bandwidth of some PCIe devices, the
> high-priority service devices can obtain more resources.
>