Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4417473imm; Wed, 30 May 2018 05:24:45 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLuO9H0BnJJVSMszsWkofAaOxB5obUObL7PaVZ6wmReO4Gi0sKH3ix8TLXa1og3k//EPzG/ X-Received: by 2002:a62:3cd1:: with SMTP id b78-v6mr2572574pfk.44.1527683085919; Wed, 30 May 2018 05:24:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527683085; cv=none; d=google.com; s=arc-20160816; b=xAIUaPLWwXSmPoe9quyrcjj3fIMkLIcrt+lKlZsVMgYB9WxtSj1kXa2MJWEyByFOcU DoPHI9+13mUCeGk4hlsxkVFfFyjx/5GZarrZWvvRyNe9/VkIPATCKh7eSOnPfPPmsh01 7b68lmGlyQ9PHi1nGjr4D8lj31+jvwIirf4ZCrve19hAPQl/DOjStS/ZGznnHMd8gzUj sToN4OGTXGFuN3TxZsvrNtKUWtLDn/HaAdfUnkRNq1fErJpLfQ/UwvGoIUT1VCArHtVi rWiriRRS8aMi84J8ca48TdFu4vvnPt9kWEE8zVo0a3FEQ3yV+/8lbdBqTGmxeOKzBxcA dKUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=MyZNni9qZtwkFNOM2abHx0a51aj4MJGXD2fJJea8nEs=; b=yhBOu//INqritHR64XMOYjAXMzDF2ZNzaRwKCkLvEE62x/2Zm9eJuyjXqqFyeKVs4W 8AxcvWMpemWedpV8FhEmhme5pNMnU7EavLUgj5J3xceLaXwj6C2GNe0QnqN+HiUTtx47 PbKur+eUktayLAgB9VoOf6KxznqsvXYMkoelswSdsFY0R8FUnqQYCwAeNthu7FAT3cXa H5qA5t0C4KE/6uwIwLWOPJHNGLQAgs5D05bRTczvdMDx1nKfMccW2glU4w478XTP3hTi /7cAomIwQqoR1FWb+zISIqvOG11UjGs25oM+hWuOeEb+DO2SHNgTmZ6XpWzt1IRWbpgt WUrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=XeZ6IKj0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r8-v6si10390383pgs.573.2018.05.30.05.24.31; Wed, 30 May 2018 05:24:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=XeZ6IKj0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753183AbeE3MXb (ORCPT + 99 others); Wed, 30 May 2018 08:23:31 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:58174 "EHLO userp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752162AbeE3MXX (ORCPT ); Wed, 30 May 2018 08:23:23 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w4UCL3bZ064615; Wed, 30 May 2018 12:23:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc : references : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=corp-2017-10-26; bh=MyZNni9qZtwkFNOM2abHx0a51aj4MJGXD2fJJea8nEs=; b=XeZ6IKj0p8UTIoivLloc8u3yrgpGz13S0Fygh/awKzmQVn2hjzgSj0+YxTN/0ePIQHzE yDqy+VYJRBecMn8er55QDJ2utt/WTwoTsXHfVaGnYKZ90Q83fdBza6QjGnP1htVVYXsO z0vNGnYYCngx+AI/iSbnsxRXmIb7wj3VhD8UrRgd0HnhIzQgevwAz5kIZvXAELqoSLQz xd4iJDFIRY7XU61YM5NtR+Iw+2G8vp2//cC6j0q3YcRdayp1pI9bV2XHdKdIsjOMKDeB GjK2KSZRs9StHtQ3zG6ECsXYiT3zHxwR6tOzazARtZ/vlrgnng0dNevYNsxbxnoRBU5p HQ== Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp2130.oracle.com with ESMTP id 2j9ev8a4bf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 May 2018 12:23:03 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w4UCN1qH029711 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 May 2018 12:23:02 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id w4UCN0j2007872; Wed, 30 May 2018 12:23:00 GMT Received: from [192.168.0.113] (/85.167.186.225) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 30 May 2018 05:23:00 -0700 Subject: Re: [PATCH] IB/mad: Use ID allocator routines to allocate agent number To: jackm , Jason Gunthorpe Cc: =?UTF-8?Q?H=c3=a5kon_Bugge?= , Doug Ledford , Daniel Jurgens , Parav Pandit , Pravin Shedge , OFED mailing list , linux-kernel@vger.kernel.org, Leon Romanovsky References: <20180529073808.27735-1-hans.westgaard.ry@oracle.com> <20180529154922.GA18457@ziepe.ca> <20180529164032.GB18457@ziepe.ca> <20180530110216.00000913@dev.mellanox.co.il> From: Hans Westgaard Ry Message-ID: Date: Wed, 30 May 2018 14:22:56 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180530110216.00000913@dev.mellanox.co.il> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8908 signatures=668702 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1805220000 definitions=main-1805300141 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/30/2018 10:02 AM, jackm wrote: > On Tue, 29 May 2018 10:40:32 -0600 > Jason Gunthorpe wrote: > >> On Tue, May 29, 2018 at 06:16:14PM +0200, Håkon Bugge wrote: >>> >>>> On 29 May 2018, at 17:49, Jason Gunthorpe wrote: >>>> >>>> On Tue, May 29, 2018 at 09:38:08AM +0200, Hans Westgaard Ry >>>> wrote: >>>>> The agent TID is a 64 bit value split in two dwords. The least >>>>> significant dword is the TID running counter. The most >>>>> significant dword is the agent number. In the CX-3 shared port >>>>> model, the mlx4 driver uses the most significant byte of the >>>>> agent number to store the slave number, making agent numbers >>>>> greater and equal to 2^24 (3 bytes) unusable. >>>> There is no reason for this to be an ida, just do something like >>>> >>>> mad_agent_priv->agent.hi_tid = >>>> atomic_inc_return(&ib_mad_client_id) & >>>> mad_agent_priv->ib_dev->tid_mask; >>>> >>>> And have the driver set tid_mask to 3 bytes of 0xFF >>> The issue is that some of the mad agents are long-lived, so you will >>> wrap and use the same TID twice. >> We already have that problem, and using ida is problematic because we >> need to maximize the time between TID re-use, which ida isn't doing. >> >> Preventing re-use seems like a seperate issue from limiting the range >> to be compatible with mlx4. >> > Preventing immediate re-use can be accomplished by judicious use of the > start argument (second argument) in the call to ida_simple_get (to > introduce hysteresis into the id allocations). > > For example, can do something like: > > static atomic_t ib_mad_client_id_min = ATOMIC_INIT(1); > ... > ib_mad_client_id = ida_simple_get(&ib_mad_client_ids, > atomic_read(&ib_mad_client_id_min), > ib_mad_sysctl_client_id_max, > GFP_KERNEL); > .... > if (!(ib_mad_client_id % 1000) || > ib_mad_sysctl_client_id_max - ib_mad_client_id <= 1000) > atomic_set(&ib_mad_client_id_min, 1); > else > atomic_set(&ib_mad_client_id_min, ib_mad_client_id + 1); > > The above avoids immediate re-use of ids, and only searches for past > freed ids if the last allocated-id is zero mod 1000. > > This is just suggestion -- will probably need some variation of the > above to handle what happens over time (i.e., to not depend on the > modulo operation to reset the search start to 1), to properly handle > how we deal with the start value when we are close to the allowed > client_id_max, and also to implement some sort of locking. > > -Jack > We came up with this code snippet which we think handles both preventing immediate re-use and too big/wrapping...         max = mad_agent_priv->ib_dev->tid_max;         start = atomic_inc_return(&start); retry:         tid = ida_simple_get(&ib_mad_client_ids, start, max, GFP_KERNEL);         if (unlikely(tid == -ENOSPC))    {                 spin_lock_irq_save();                 tid = ida_simple_get(&ib_mad_client_ids, start, max, GFP_ATOMIC);                 if (unlikely(tid == -ENOSPC))    {                         atomic_set(&start, 1);                         spin_unlock_irq_restore();                         goto retry;                 }                 spin_unlock_irq_restore();         } Hans