Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3883956pxv; Mon, 19 Jul 2021 11:04:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwTN45YumjMwErIzD0irG2s5VDxV1211PPBbKEMbK4MiGCV4w4spEYy1YbORUbfznkt9mj/ X-Received: by 2002:a02:cc19:: with SMTP id n25mr22911595jap.140.1626717857957; Mon, 19 Jul 2021 11:04:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626717857; cv=none; d=google.com; s=arc-20160816; b=a6TQ7Tk2xzWlyuQwe5ZlqEW3hPaOkOlpy3eYgTtFZrOPJxGwkQjKQXb/DlfrQ0qkuC H7ogWxWeFEZy5W8YXX9wv+KT7GAYOLzaOBVGeO/Vr6Qnkpm9/t4P3WdsRv/PMrHEdDCg LxIWfi61vhUJ7+AALPMkQmwkg8Gxx7PvybEgtdtAjqUj0QRmv/bUqUAC4n0CVIeJcQm9 6wYaUEEslvny7SMLBIGz1pXBRGF1zwpDU2SXFMVbssV7uhqJzt14BvxjhkQ3U0XvbP/e +YD3X90xPi+xPsSfHm+3nhNu26MIdnl/vdCdEStd9BjVNRdweD5rJCSKNso0yoUXgKwI tXqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=McFE8sGMz4h7ELCeVtNcmBDnV+G3QDNm212fiO66A5c=; b=Bi6N4Bk6NQ/5wUJ73WwoNuWR6gnys9XxyLnsTOJin7p7hmQjPgnzQWM25AVurXeOhT PzzwwjL1NaZ8IIpdEHt9+ssl30VebcYKhYBcWxbDX/JQOz26iGokWkDjqisESFn4NjM7 PP+DMuCt6JaO8xa5hOHUHs+muSrXbcP68MaeE6ledDhKga3S2ruuIqIL1qHEUr+cxGO9 CWnAMUjz77aDLYILFapldQeenn9FRX2Zh6NhCDttVf/mUAo6nE+w/um7lk031w485CzL QK85Ot7OOYmKtpaL1Yw3RoN+E1mMMxxLMkGJoylDGmH9xeiWIxdJsIYFf5IhCfRE/l+U OejQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=dNHyUT3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a9si20599215ilr.103.2021.07.19.11.04.07; Mon, 19 Jul 2021 11:04:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=dNHyUT3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356026AbhGSRTW (ORCPT + 99 others); Mon, 19 Jul 2021 13:19:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:36334 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348286AbhGSPlz (ORCPT ); Mon, 19 Jul 2021 11:41:55 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EE3FF613D2; Mon, 19 Jul 2021 16:21:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626711706; bh=YjDbZylTrxVoViU6jlMBklcY7OYNE36O/b0sSEiE9e0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dNHyUT3iL5/Nw4z9ruoHJM9okMNB5CMNmdsb/iiGkWk0bxpqv+DbDKyAtaVoz3l1d tj3IZKQn4+0qr6ljckVlVHLzs+8bc7lAAGaHAWQgADg3PuE3Elp8xRJ2jxRwW0chst QY0JeCjfSmxCBmHKfg43oz1U0qVUVVlfVo6+fm7c= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ohad Sharabi , Oded Gabbay , Sasha Levin Subject: [PATCH 5.12 102/292] habanalabs: fix mask to obtain page offset Date: Mon, 19 Jul 2021 16:52:44 +0200 Message-Id: <20210719144945.854600196@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.514164272@linuxfoundation.org> References: <20210719144942.514164272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ohad Sharabi [ Upstream commit 0f37510ca34848718db1003479bb4671e8f3c112 ] When converting virtual address to physical we need to add correct offset to the physical page. For this we need to use mask that include ALL bits of page offset. Signed-off-by: Ohad Sharabi Reviewed-by: Oded Gabbay Signed-off-by: Oded Gabbay Signed-off-by: Sasha Levin --- drivers/misc/habanalabs/common/mmu/mmu.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/misc/habanalabs/common/mmu/mmu.c b/drivers/misc/habanalabs/common/mmu/mmu.c index 93c9e5f587e1..86dfa7c41ee7 100644 --- a/drivers/misc/habanalabs/common/mmu/mmu.c +++ b/drivers/misc/habanalabs/common/mmu/mmu.c @@ -501,12 +501,20 @@ static void hl_mmu_pa_page_with_offset(struct hl_ctx *ctx, u64 virt_addr, if ((hops->range_type == HL_VA_RANGE_TYPE_DRAM) && !is_power_of_2(prop->dram_page_size)) { - u32 bit; + unsigned long dram_page_size = prop->dram_page_size; u64 page_offset_mask; u64 phys_addr_mask; + u32 bit; - bit = __ffs64((u64)prop->dram_page_size); - page_offset_mask = ((1ull << bit) - 1); + /* + * find last set bit in page_size to cover all bits of page + * offset. note that 1 has to be added to bit index. + * note that the internal ulong variable is used to avoid + * alignment issue. + */ + bit = find_last_bit(&dram_page_size, + sizeof(dram_page_size) * BITS_PER_BYTE) + 1; + page_offset_mask = (BIT_ULL(bit) - 1); phys_addr_mask = ~page_offset_mask; *phys_addr = (tmp_phys_addr & phys_addr_mask) | (virt_addr & page_offset_mask); -- 2.30.2