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); >>