On 10/29/23 21:33, Xiao Yang wrote:
> On 2023/10/14 6:38, Dave Jiang wrote:
>>
>> On 10/9/23 03:52, Xiao Yang wrote:
>>> On 2023/9/21 6:57, Dave Jiang wrote:
>>>> +        if (daxctl_memory_online_no_movable(mem)) {
>>>> +            log_err(&rl, "%s: memory unmovable for %s\n",
>>>> +                    devname,
>>>> +                    daxctl_dev_get_devname(dev));
>>>> +            return -EPERM;
>>>> +        }
>>> Hi Dave,
>>>
>>> It seems wrong to check if memory is unmovable by the return number of 
>>> daxctl_memory_online_no_movable(mem) here. IIRC, the return number of 
>>> daxctl_memory_online_no_movable(mem)/daxctl_memory_op(MEM_GET_ZONE) 
>>> indicates how many memory blocks have the same memory zone. So I think you 
>>> should check mem->zone and MEM_ZONE_NORMAL as daxctl_memory_is_movable() 
>>> did.
>> Do you mean:
>> rc = daxctl_memory_online_no_movable(mem);
>> if (rc < 0)
>>     return rc;
>> if (rc > 0) {
>>     log_err(&rl, "%s memory unmovable for %s\n' ...);
>>     return -EPERM;
>> }
>>
> Hi Dave,
> 
> Sorry for the late reply.
> 
> Is it necessary to try to online the memory region to the MEM_ZONE_NORMAL by 
> daxctl_memory_online_no_movable(mem)? If you just want to check if the 
> onlined memory region is in the MEM_ZONE_NORMAL, the following code seems 
> better:
>     mem->zone = 0;
>     rc = daxctl_memory_op(mem, MEM_GET_ZONE);
>     if (rc < 0)
>         return rc;
>     if (mem->zone == MEM_ZONE_NORMAL) {
>         log_err(&rl, "%s memory unmovable for %s\n' ...);
>     return -EPERM;
>     }
> 

Ah that was a mistake. I meant to call the query function and not the online op 
function. Do you have any objections to

if (!daxctl_memory_is_movable(mem))

> Best Regards,
> Xiao Yang

Reply via email to