On Tue, 2018-06-26 at 21:41 +0300, Andy Shevchenko wrote: > > > > @@ -42,9 +41,10 @@ static inline void > > > > ratelimit_state_init(struct > > > > ratelimit_state *rs, > > > > { > > > > memset(rs, 0, sizeof(*rs)); > > > > > > > > - raw_spin_lock_init(&rs->lock); > > > > rs->interval = interval; > > > > rs->burst = burst; > > > > + atomic_set(&rs->printed, 0); > > > > + atomic_set(&rs->missed, 0); > > > > > > Can it be > > > > > > *rs = RATELIMIT_STATE_INIT(interval, burst); > > > > > > ? > > > > > > (Yes, the '(struct ratelimit_state)' has to be added to macro to > > > allow this) > > > > Sure. > > This part, by the way, potentially can be split into preparatory > patch. Please, double check if it possible to do this way. Hmm, I tried this way: :#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) ({ \ : struct ratelimit_state name = { \ : .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ : .interval = interval_init, \ : .burst = burst_init, \ : }; \ : name; \ : }) but the expression becomes non-constant, so it fails to compile in definitions of globals. I think I'll change it to struct ratelimit_state tmp = RATELIMIT_STATE_INIT(...); *rs = tmp; Not perfect, but we did memset() and set elements after, so it's kinda the same. -- Thanks, Dmitry _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel