[PATCH v3 1/4] drm: add function drm_file_err to print proc information too
Christian König
christian.koenig at amd.com
Wed Apr 16 11:22:44 UTC 2025
Am 16.04.25 um 10:39 schrieb Khatri, Sunil:
>
> On 4/16/2025 12:37 PM, Tvrtko Ursulin wrote:
>>
>> On 15/04/2025 19:43, Sunil Khatri wrote:
>>> [SNIP]
>>> +
>>
>> I was hoping something primitive could be enough. With no temporary stack space required. Primitive on the level of (but simplified for illustration purpose):
>>
>> #define some_err(_file, _fmt, ...) \
>> drm_err(dev, "client-%s: " _fmt, (_this)->client_name, ##__VA_ARGS__)
> I also thought of doing it similarly but that dint work. There was lot of code to get the process name and pid along with client_name too. So ##__VA_ARGS__ dont work as soon as its a function and not macro.
> Also drm_err gave me errors and this is the way i find it not complaining. new_fmt is a string directly anymore and hence need to %s to pass but then the drm_err complain too many args for args to pass. So i have to combine new_fmt and args in one to get final_fmt and atleast functionally it worked.
>
> Yesterday even i though that i would be as simple as adding a macro.
It's a bit tricky, but I think that is doable.
You need something like this here:
#define drm_file_err(file, fmt, ...)
do {
struct task_struct *task = drm_file_lock_pid(file);
drm_err(file->dev, "task: %s pid: %d client: %s" fmt, task, file->pid, ##__VA_ARGS_);
drm_file_unlock_pid(file);
} while (0);
You then just need to implement drm_file_lock_pid (maybe come up with a better name) to grab the mutex and take the RCU read lock.
Christian.
>>
>> Am I missing something or that would work?
>>
>> Regards,
>>
>> Tvrtko
>>
>>> void drm_file_update_pid(struct drm_file *);
>>> struct drm_minor *drm_minor_acquire(struct xarray *minors_xa, unsigned int minor_id);
>>
More information about the dri-devel
mailing list