> > Two kernel threads may get the same value for agent.hi_tid, if the agents are > registered for different ports. As of now, this works, as the agent list is per port. > > It is however confusing and not future robust. Hence, making it atomic. > > Signed-off-by: Håkon Bugge <haakon.bugge@xxxxxxxxxx> > Reviewed-by: Jack Morgenstein <jackm@xxxxxxxxxxxxxxxxxx> Reviewed-by: Ira Weiny <ira.weiny@xxxxxxxxx> > --- > drivers/infiniband/core/mad.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index > c50596f7f98a..b28452a55a08 100644 > --- a/drivers/infiniband/core/mad.c > +++ b/drivers/infiniband/core/mad.c > @@ -59,7 +59,7 @@ module_param_named(recv_queue_size, mad_recvq_size, > int, 0444); MODULE_PARM_DESC(recv_queue_size, "Size of receive queue in > number of work requests"); > > static struct list_head ib_mad_port_list; > -static u32 ib_mad_client_id = 0; > +static atomic_t ib_mad_client_id = ATOMIC_INIT(0); > > /* Port list lock */ > static DEFINE_SPINLOCK(ib_mad_port_list_lock); > @@ -377,7 +377,7 @@ struct ib_mad_agent *ib_register_mad_agent(struct > ib_device *device, > } > > spin_lock_irqsave(&port_priv->reg_lock, flags); > - mad_agent_priv->agent.hi_tid = ++ib_mad_client_id; > + mad_agent_priv->agent.hi_tid = > atomic_inc_return(&ib_mad_client_id); > > /* > * Make sure MAD registration (if supplied) > -- > 2.13.6 ��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f