From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A922C3DA6E for ; Wed, 20 Dec 2023 16:58:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 16EBD8D0001; Wed, 20 Dec 2023 11:58:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0F81D6B007D; Wed, 20 Dec 2023 11:58:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E3DD08D0001; Wed, 20 Dec 2023 11:58:41 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CB7036B0078 for ; Wed, 20 Dec 2023 11:58:41 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 838CAC048E for ; Wed, 20 Dec 2023 16:58:41 +0000 (UTC) X-FDA: 81587805642.29.1C4EE34 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2072.outbound.protection.outlook.com [40.107.92.72]) by imf03.hostedemail.com (Postfix) with ESMTP id 869642000E for ; Wed, 20 Dec 2023 16:58:37 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=jFLWUyEQ; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf03.hostedemail.com: domain of Felix.Kuehling@amd.com designates 40.107.92.72 as permitted sender) smtp.mailfrom=Felix.Kuehling@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703091517; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=g4il+ajnZKpaFNQo1alIy223IKM/zXIqsGNj1u4T+0c=; b=aRxiKoxiY/Bo0hiYbrqZ1SsnJsmMjMvROUk0OovCb9oRXkrGLnmnqyBXebrIpSMx6sRM3I EANW8/X+EexgKM+U9GOxzVNjKDET+BeCDxC3Cmh6aEo7NQGJAP9IFKwvAUR41yKPqH7Xo/ NVhwuBQsWVFC/rbrpAfq4d/5r/PsfoQ= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1703091517; a=rsa-sha256; cv=pass; b=VG+fhyqTTCz+ILBVK+n1k14pYyeVQ6G68BDk0uUWpgyBHtoFwKl0pDka/sEjhdXcdNrVh4 lwZVOqUvCTrRmLPXookpnur6Te4Rsivxd/rLRrCdJ4GtVwoHOsqcW6IFtXHw7dLl1NpHrE xJ0EVDhZGOvoGABld+2HaflFOUViGjQ= ARC-Authentication-Results: i=2; imf03.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=jFLWUyEQ; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf03.hostedemail.com: domain of Felix.Kuehling@amd.com designates 40.107.92.72 as permitted sender) smtp.mailfrom=Felix.Kuehling@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZK7wVBotE/scufRBvWpaQ8NiyzwKkwEr/8B3LJJRgB6jBeNx5CMXHxqjqEE+PzvGyNzv4TDfKV1C+7yFwEs6WMs05YwIBQB2NvVs7pcXsvQf+f2GKKrktqJ5OkwDN77UXDXCjbaKKlt/3feDjdJCydnkneF//6yms646nXHKdJBCoomBEWG1lPrjkKMxRP3AaT/xoKPTqRysZK1UCnsmhXlgstb4oFteHDLOazJ9vjCXRHUnLrBDOFs9S0VpS4vaCiD82BGLGTzW0mJbLRAQRg3zobCVt8QPeuMa1B4sdJs1jKF9c14xU+xPFz06gPxoyGITlaNR4iVCnxXocWkL1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g4il+ajnZKpaFNQo1alIy223IKM/zXIqsGNj1u4T+0c=; b=kun5ZikFaWTrwjgEpb4LujbfgM9kzDehdBu3IPb0xbfIPwkG5wVp8yetgmFkX/rFxF9caWnNcZec1uENDAoMS5rwoakHfXIZ3kGNbcQbIT8zEbalXjG5LtBVaetJFV+Lfybre6Ax9/4Rgzduzeuv+6XXBd4Tw+LLjN1zQ2PxXSRID8JPOO7ZzXfk0OpERTd9/tb60OhObocgQ2o+c1XUgPtnoJlbXBH91OkHZFM4aLnD53W8DIA4akpeLTjoRwLOtfWk9z/uQ2wFCgIjvZKflfK9xLQblGXCZOMfTjAtgGavuUWCggYo0c+O3arUcuZzRCOBfzfL0zN9I8cw9q82RA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g4il+ajnZKpaFNQo1alIy223IKM/zXIqsGNj1u4T+0c=; b=jFLWUyEQUj1wCn6/OOGk2kgHpXJIEXG3O9z2neRljeCKPoRvd5C1P2CDOjrVcJDLUmeBaF+Zz2PlI85O8RH2Dm+EFw46IrM+VGxdc2U92zWJ8hwnJod1Hndls3m5BDgb6Rq8ymTe9+rlPkWg/i5RfOk4qpTMv7YpJsjFJEo4XWg= Received: from BN9PR12MB5115.namprd12.prod.outlook.com (2603:10b6:408:118::14) by CH3PR12MB9147.namprd12.prod.outlook.com (2603:10b6:610:19a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.18; Wed, 20 Dec 2023 16:58:31 +0000 Received: from BN9PR12MB5115.namprd12.prod.outlook.com ([fe80::7bfc:e32b:f362:60f3]) by BN9PR12MB5115.namprd12.prod.outlook.com ([fe80::7bfc:e32b:f362:60f3%5]) with mapi id 15.20.7113.016; Wed, 20 Dec 2023 16:58:31 +0000 Content-Type: multipart/alternative; boundary="------------kyKS40pYdhyQbwE7EUIGXQx2" Message-ID: Date: Wed, 20 Dec 2023 11:58:28 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] drm/amdkfd: Fix sparse __rcu annotation warnings Content-Language: en-US From: Felix Kuehling To: =?UTF-8?Q?Christian_K=C3=B6nig?= , amd-gfx@lists.freedesktop.org, =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: linux-mm@kvack.org, kernel test robot References: <20231205222026.2108094-1-Felix.Kuehling@amd.com> <7b67d4f1-cfcd-47a9-a80e-f4c1eee235a1@amd.com> In-Reply-To: <7b67d4f1-cfcd-47a9-a80e-f4c1eee235a1@amd.com> X-ClientProxiedBy: YQZPR01CA0012.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:85::10) To BN9PR12MB5115.namprd12.prod.outlook.com (2603:10b6:408:118::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN9PR12MB5115:EE_|CH3PR12MB9147:EE_ X-MS-Office365-Filtering-Correlation-Id: d3446bdc-1f32-48b0-cdfe-08dc017ce528 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pGhNysOGHVymfC+woacRUvvNBZmUF1cYtm8Z08Nc7Zad/jTsoKCc0KRZ6PxMngPfXN9CkdOXr4KNNzk3SGMItNCMk7QKWIxCIqL/YmU1fYkbruwUqpA6nyCWVXG3Rmvcg3ChlxIYM6v7V/JkNvIDc/vubQ1WSSLZ/vxs6HQJC3AJWv/JtnOCzYTxjsNgN0ebfBgjne1W9FNDGuR/bBT15lOyrLrdFsSjv5hWjstCjf7JQDj7ZEqFWeeXKjIKt81T1IxbkLa/AD90GxEgRuB2rgX+0oY7wTFafObpc6moaY1eYe2mDC7K+Mo7wHGlVfoaF+EWTr9AADlqLWXGe7tn9j+9DVdpYuik0uQrzHfBHUvx0NS+7/STzSV3hlHcGbT/H7pxTfkondJD6uqWZVJNXPGHaGMfESxcJvZmmQY7Zh6Ex1MxJ8zWXRD5pQMOo9d6TZ6qUib9NCJJawpS/Hlukp1VGWCSmHExY1gLzYsjuBs4zj7WmxTtqxDDeRosdxMIppOawQ4dKRKm9bUdnIZW7PkThC+pgs3g7ULb46OIwX1Jt8f2LIPQ8c5091h56M24+uQToaZudiI6cC+psTjQVehigb8IDIs0N7iLNId3BmRymjsTkY6JT8aCyu5/16am X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR12MB5115.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366004)(396003)(346002)(376002)(136003)(39860400002)(230922051799003)(1800799012)(451199024)(186009)(64100799003)(38100700002)(2906002)(36756003)(4001150100001)(8936002)(166002)(8676002)(5660300002)(30864003)(44832011)(4326008)(478600001)(26005)(2616005)(6486002)(41300700001)(966005)(66574015)(6506007)(31686004)(53546011)(6512007)(6666004)(83380400001)(66946007)(31696002)(86362001)(66476007)(66556008)(33964004)(6636002)(316002)(110136005)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c09OejdBN1NRSEIyNlNSUEU3Q3M4VWloREl1anNOTFVpZ3FaRE5CUnN5NFl4?= =?utf-8?B?Z2hNMzdJZzNjUEFWcUhvWTFPL2duMVd1R2dhWEFNY0ZndVNTcmZlVXFMa1FI?= =?utf-8?B?c3RUVXI3d0hhcHJXbHU1QTY4cHdWZEF6SHlqQkVTdGZPK1NZTmlONHZTeDFK?= =?utf-8?B?M1hodkFkNzN0Ky90SjhzSWZQQUZhMllTY0xGakJINVZ5OTRiZlZyMHRvRTdK?= =?utf-8?B?TFJOVmpmMWVSRXNPZ25sSEdkZWUrNFdZZ1JJNmlxZ0JpcEp1UG9TNmRlL0dT?= =?utf-8?B?aFdLUHVJbkZvams3TThQY3ZFbWthbklBc0w2dFNPSURiazZ0UEorTFA5Yk1x?= =?utf-8?B?cUsyYjRZekF0VnVyMVJ6RU9JRDhyUWVwendUR3RUdWRHSWFmT0hwNVhPdjlp?= =?utf-8?B?dkpQK244QldWZlBMa3dnVmVYdXpPVXFYUElhbEU1RXBCZlBwNUMwZmY3cXZF?= =?utf-8?B?VVJHU1l5VTBmUDR3YktIMGY5QXVSUHpyRTlLeDdlZWpZOVpLWERxQ0FrYXZZ?= =?utf-8?B?WWJFVzhLRGtCYTB6SHBIcy9GdmJqUGJvVS94WFZYZlNERjZ1TzRQb0h5V3dT?= =?utf-8?B?alpkZkhtQ2hUd0dCNHMvZnQrS3BUaXVMQzlLUXM4REF1NTB6c21vRzdLYzZo?= =?utf-8?B?N3JnU3RuNENvM1dEUTVrVjBHcHBReTJCNVhYWUU0bDEwbHd0bXRDM1VDSmNF?= =?utf-8?B?Z1hnOHhCMXFZOXhzenFDaVdYaHgzVDRSZlhFcUZTN1IrcjFKdHFUUi9MVWo3?= =?utf-8?B?cXpQUE5sNGdTQVcvUmZVWDJ6dVhjYTFsamNmUmlJSStQNVY0b1pVYUpab1ZP?= =?utf-8?B?Ky8zVDRaQTd2eXYrKzVwL2U5MkZ3UTJrNFhBclFOR2ZBYXlDN2R1eno3aHhE?= =?utf-8?B?VmMwR0draHhQM20wTUlnaWtWbmlERERwYmVCekd4c3RZZnN1WFlWdEd5QjNB?= =?utf-8?B?TlIwUE8xaC9odnNBYW1KaTFrWDZVZ01rNEhVQ21hdTl5alh0ZnNwcGkyM3pD?= =?utf-8?B?V0RVMHZHTURyMHgrdVlhNmsxUy9lRXRWdnpzbzBKUXpGMkxESGdaL0p4S2dR?= =?utf-8?B?NU9tblBpQnNuRzg0MitrRFh6MUVTK1F1QUVOR3d3ZCtCNFRia0YrL2M5RE95?= =?utf-8?B?ejJmelpudjVoTlB5R0hWVXlrRll0emtYd2dsVkRzTUI4Um1UZjJMRFRXb3lr?= =?utf-8?B?UjhVOElpN3ozQVdoazZzYUxDWVB5R2w5ODA0RFlJeUY3dW9XWnlJZVhCS0tm?= =?utf-8?B?dTNreCtYb01rWkFXYVpJdjRleWxmR0ZhdVgrbFd3MjVmQjRjRFUzL2d2aHVs?= =?utf-8?B?eHNvaHNwVFFHR3AyMFUvS0VIdXlpY2xBRXk3b0d1SGJPOU9raTFVZU5NakNo?= =?utf-8?B?Z09GV3hOZ0tnc1hBWUtwbzA4NDRrOG4yZ0xKakhPOXVYazd5Y2F3MzMweDNk?= =?utf-8?B?R3QwZTZnOHhnbkkrRlVVWHpxU1E0Vjc2dkJjNTFrbmlDbE5CMDlza3hadlRQ?= =?utf-8?B?RjBOSEJUcks0Z1RTREN0d0dDekl2ZUlhbXdmY2Y3L3VmR3VxWGxMaGpvalJR?= =?utf-8?B?NUh2Z2NXR2pESGx1UUpXbFVQOURvU2NXUzhRTkhaWEZpVk0rN3dvaVp1ekdp?= =?utf-8?B?VVlPWHVZajlmM2FGOUJ3K0VMbG93bTdWdzU3VFlnQm5Yais3WEJtNUtnZ293?= =?utf-8?B?MThXaE0yb1loVzNqWXlyVVhXejZ3THBqd2s2Z255dXJidnljZWNueXZTV3pa?= =?utf-8?B?b1RkTWJCSmNCQkJUL3BiVmxyMHFXcFNmTEtsdzZRUVc4VFNvRkVPWkV2VXQw?= =?utf-8?B?NVg3cjUvS2t1VUlHcnBaQW9xRVcxZzRYNG94c0RnbjJzb0RpSjJPdG5rbmV2?= =?utf-8?B?aVdvMmIyVmNHTTNBdDhvZmQzN3ZKTWZXdXN5WldSWlJ5bG9JSVpBZmVmVGtT?= =?utf-8?B?OE00cGhNWjlwOURvZkpvVHJvZjZZZTFiS2dUN1Y3OVNBRDBFVFA2MGg0akFK?= =?utf-8?B?U3dIZlEvOG1vcUNzTzVGbGRMdW9UbEp0RzR3UVoxcXZLUWJ5WUpnYWdORVls?= =?utf-8?B?bmxMOGF2VGxhR2JYajdka2U5VjQ4ZDdiZmFpUFk0OHBqYzNqQzhqeDU2bFcv?= =?utf-8?Q?ATvJ+YxObdbhr88W3BYgRN5fc?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3446bdc-1f32-48b0-cdfe-08dc017ce528 X-MS-Exchange-CrossTenant-AuthSource: BN9PR12MB5115.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2023 16:58:31.3368 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XUPCOJMtUuiKG2AMj5dWMLms18tKh79oEHNlzMMgLhIpKxsTIB1Cg5BZnI0Ev0Ohn13m8KLxOq8whahZJ3Xa+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9147 X-Stat-Signature: gwixmqn7wobxyfrtqq838gb7grznaiu9 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 869642000E X-Rspam-User: X-HE-Tag: 1703091517-505447 X-HE-Meta: U2FsdGVkX1+SCDP2nPsb7juu+YYsu22vOYrA3HCo1skMOXijQhu9yz6WsLUmSjt6Use5hgPNJz2JjzzFRdf7XjFhqsZF/tK92YqYNNyozUisPP0Asi8Ida7soMN8UXIe5v7qq3cWJL9uyDDQu2nl0Tp1d7qk9KvWdDdsbY1XEpJhYJWysYVVP+UXZCWrDT6NtR1lkMNmbNa2XhDZRzeQ7ZTF/OEcXz2tYZdyjGhaliPNnTO7oXSJIk+xR+teizpgRBNOOtVknYvZ2cD58BLhGb2/S8OHxhpTdfwsKM6bVn7Xmr3QNYeqsXIyhW1VIrqE7vDEZ1J9+khgCvkn8o1FdNCfEHmXS/G1ttmbOaAzHyL9OR0lKLzOpfs8RYdIeERO9tluoQmVHdftw5IWjQmCL+oq8CGICnHclL4YK1WCsj9gPRDJqlChVfEhu6uAMDi7axc5p8fdxhIAefnzpxlEnJxs+FyIsyfVxDSK9SuyaDGzmhFEcZBDKi7ufR5AmSgzTzssg8X87HOEbNSVnFmzz9FtXE418aeANCo2MmFtypyD3HX5K/tzOp1cUGCPw+vx+uJg0N6ZVzK6arnBH3+iU+kewG7MnN4/a0AbhzUATW/kIl0jODHdsz1y14v3Na6/HFib2AMH1VbhdPaP0XFNminEWFU7/ksyE3Aseip44ZJKBcYUQaTizRyqLhTX09q1eX4qSIe6dE6OKrTaljjqpX2jSCDW9Tgpu8CHVtBcJxSqGVHbcDtkQfsDNf//1cND2FJqEtpCDot7sYLsw6+t1mF1jc+r9l5kwkFfl5QoKamQ+EIBBB5QAn9nhY+wJNg6s+04s2otsEdVYZtYrkBKbz5qP/1emfMp3WhOvWpwSoezqgxYk4ShW9VmgeYo5477H3BQrrpPIzggTxQbPOVbQ+LyJG8LgN6ShfFIsM/2Vv17mtckR1MY8dCYNIkK6wWbqRLilAHr2S+MoNbGQ8n a2rT4YOk wJeZTuoxIkKRzHkVb4mLe8BUci2s46/Da0mScyBgwR5gM8Q1JhZFjloj6OCkflAhogP5vs5Nkzt71rAP0f1Z9BhdQ1faNDvjWLlM2AtZYt90YIMHOepF1u+FpaC3wMeAyamb9MFJrvULJkRDPl2acIAVj8N7oVASANI6PZCawpHo/WfkzApJoJPHQ8ADlay9UEfg8QVsdaU1etwU3wr4stqgVwSR91J2sNul7dOtjaEiL3OQlQT66ERGWLfCs3Gc1glVPSRuAYXZ7EoQeTwnizhpBXZWH5mxtZAoqPB/49BsWr9oI85wgNKOUc3Ongip0Z5TwIVkgCQz5O09Lr10hSof/pMbIJx6yU7qYoIbTfKMEbi+PzwXYWYk15EmSyTrykjGgub7L+8vICIIf2SbHiCfmBgQUzmnzgzwKNyo3+hbxYbYobhI6j5jcZ47miPsPs3HCGwcScC0YKro2vV3u3mbbqsAdwdhAKvOwbV8BSh4g8+jBH4vfkHj3UWb4p8+hFPu0jSh2+8WCRaZBu8BjCcE0PAgPYZl464+vRhMDoDmarAc5xW/CuezJ7zPDEYqW1tgPmR50jJzGShyMyT7LxHxpqw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --------------kyKS40pYdhyQbwE7EUIGXQx2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2023-12-11 10:56, Felix Kuehling wrote: > > On 2023-12-08 05:11, Christian König wrote: >> Am 07.12.23 um 20:14 schrieb Felix Kuehling: >>> >>> On 2023-12-05 17:20, Felix Kuehling wrote: >>>> Properly mark kfd_process->ef as __rcu and consistently access it with >>>> rcu_dereference_protected. >>>> >>>> Reported-by: kernel test robot >>>> Closes: >>>> https://lore.kernel.org/oe-kbuild-all/202312052245.yFpBSgNH-lkp@intel.com/ >>>> Signed-off-by: Felix Kuehling >>> >>> ping. >>> >>> Christian, would you review this patch, please? >> >> Looks a bit suspicious, especially the rcu_dereference_protected() use. >> >> What is the static checker complaining about in the first place? > From > https://lore.kernel.org/oe-kbuild-all/202312052245.yFpBSgNH-lkp@intel.com/: > >>> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse: >>> sparse: incompatible types in comparison expression (different >>> address spaces):  >> >>> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse: > struct dma_fence [noderef] __rcu * >> > drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse: > struct dma_fence * ... >> > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: > sparse: incompatible types in comparison expression (different address > spaces): >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: > sparse: struct dma_fence [noderef] __rcu * >> > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: > struct dma_fence * >> > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: > sparse: incompatible types in comparison expression (different address > spaces): >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: > sparse: struct dma_fence [noderef] __rcu * >> > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: > struct dma_fence * > > As far as I can tell, the reason is, that I'm using > dma_fence_get_rcu_safe and rcu_replace_pointer to get and update > kfd_process->ef, without annotating the fence pointers with __rcu. > This patch fixes that by marking kfd_process->ef as an __rcu pointer. > The only place that was dereferencing it directly was > kfd_process_wq_release, where I added rcu_dereference_protected. The > condition I'm using here is, that the process ref count is 0 at that > point, which means nobody else is referencing the process or this > fence pointer at the time. Hi Christian, We discussed offline that you think rcu_dereference_protected is not needed in the teardown function. After reading over rcupdate.h, I think a simpler alternative would be to use rcu_access_pointer, after a grace period to ensure there can be no more readers. Based on this comment in rcupdate.h: * It is also permissible to use rcu_access_pointer() when read-side * access to the pointer was removed at least one grace period ago, as is * the case in the context of the RCU callback that is freeing up the data, * or after a synchronize_rcu() returns. This can be useful when tearing * down multi-linked structures after a grace period has elapsed. However, * rcu_dereference_protected() is normally preferred for this use case. The last sentence sounds like rcu_dereference_protected should also be OK, though. Either way, it sounds like I need to add a synchronize_rcu call in any case, before freeing the fence. Do you agree with this proposal? Regards,   Felix > > Regards, >   Felix > > >> >> Regards, >> Christian. >> >>> >>> Thanks, >>>   Felix >>> >>> >>> >>>> --- >>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 2 +- >>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++-- >>>>   drivers/gpu/drm/amd/amdkfd/kfd_priv.h            | 2 +- >>>>   drivers/gpu/drm/amd/amdkfd/kfd_process.c         | 6 ++++-- >>>>   4 files changed, 8 insertions(+), 6 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h >>>> index f2e920734c98..20cb266dcedd 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h >>>> @@ -314,7 +314,7 @@ void >>>> amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem); >>>>   int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_device *adev, >>>> struct amdgpu_bo *bo); >>>>     int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info, >>>> -                        struct dma_fence **ef); >>>> +                        struct dma_fence __rcu **ef); >>>>   int amdgpu_amdkfd_gpuvm_get_vm_fault_info(struct amdgpu_device >>>> *adev, >>>>                             struct kfd_vm_fault_info *info); >>>>   int amdgpu_amdkfd_gpuvm_import_dmabuf_fd(struct amdgpu_device >>>> *adev, int fd, >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >>>> index 7d91f99acb59..8ba6f6c8363d 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c >>>> @@ -2806,7 +2806,7 @@ static void >>>> amdgpu_amdkfd_restore_userptr_worker(struct work_struct *work) >>>>       put_task_struct(usertask); >>>>   } >>>>   -static void replace_eviction_fence(struct dma_fence **ef, >>>> +static void replace_eviction_fence(struct dma_fence __rcu **ef, >>>>                      struct dma_fence *new_ef) >>>>   { >>>>       struct dma_fence *old_ef = rcu_replace_pointer(*ef, new_ef, true >>>> @@ -2841,7 +2841,7 @@ static void replace_eviction_fence(struct >>>> dma_fence **ef, >>>>    * 7.  Add fence to all PD and PT BOs. >>>>    * 8.  Unreserve all BOs >>>>    */ >>>> -int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct >>>> dma_fence **ef) >>>> +int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct >>>> dma_fence __rcu **ef) >>>>   { >>>>       struct amdkfd_process_info *process_info = info; >>>>       struct amdgpu_vm *peer_vm; >>>> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h >>>> b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h >>>> index 45366b4ca976..5a24097a9f28 100644 >>>> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h >>>> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h >>>> @@ -917,7 +917,7 @@ struct kfd_process { >>>>        * fence will be triggered during eviction and new one will >>>> be created >>>>        * during restore >>>>        */ >>>> -    struct dma_fence *ef; >>>> +    struct dma_fence __rcu *ef; >>>>         /* Work items for evicting and restoring BOs */ >>>>       struct delayed_work eviction_work; >>>> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c >>>> b/drivers/gpu/drm/amd/amdkfd/kfd_process.c >>>> index 71df51fcc1b0..14b11d61f8dd 100644 >>>> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c >>>> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c >>>> @@ -1110,6 +1110,8 @@ static void kfd_process_wq_release(struct >>>> work_struct *work) >>>>   { >>>>       struct kfd_process *p = container_of(work, struct kfd_process, >>>>                            release_work); >>>> +    struct dma_fence *ef = rcu_dereference_protected(p->ef, >>>> +        kref_read(&p->ref) == 0); >>>>         kfd_process_dequeue_from_all_devices(p); >>>>       pqm_uninit(&p->pqm); >>>> @@ -1118,7 +1120,7 @@ static void kfd_process_wq_release(struct >>>> work_struct *work) >>>>        * destroyed. This allows any BOs to be freed without >>>>        * triggering pointless evictions or waiting for fences. >>>>        */ >>>> -    dma_fence_signal(p->ef); >>>> +    dma_fence_signal(ef); >>>>         kfd_process_remove_sysfs(p); >>>>   @@ -1127,7 +1129,7 @@ static void kfd_process_wq_release(struct >>>> work_struct *work) >>>>       svm_range_list_fini(p); >>>>         kfd_process_destroy_pdds(p); >>>> -    dma_fence_put(p->ef); >>>> +    dma_fence_put(ef); >>>>         kfd_event_free_process(p); >> > --------------kyKS40pYdhyQbwE7EUIGXQx2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
On 2023-12-11 10:56, Felix Kuehling wrote:

On 2023-12-08 05:11, Christian König wrote:
Am 07.12.23 um 20:14 schrieb Felix Kuehling:

On 2023-12-05 17:20, Felix Kuehling wrote:
Properly mark kfd_process->ef as __rcu and consistently access it with
rcu_dereference_protected.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202312052245.yFpBSgNH-lkp@intel.com/
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>

ping.

Christian, would you review this patch, please?

Looks a bit suspicious, especially the rcu_dereference_protected() use.

What is the static checker complaining about in the first place?
From https://lore.kernel.org/oe-kbuild-all/202312052245.yFpBSgNH-lkp@intel.com/:

drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse: sparse: incompatible types in comparison expression (different address spaces):  >> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse:
struct dma_fence [noderef] __rcu * >> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:1671:9: sparse: struct dma_fence * ... >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: struct dma_fence [noderef] __rcu * >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: struct dma_fence * >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: struct dma_fence [noderef] __rcu * >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:2765:36: sparse: struct dma_fence *

As far as I can tell, the reason is, that I'm using dma_fence_get_rcu_safe and rcu_replace_pointer to get and update kfd_process->ef, without annotating the fence pointers with __rcu. This patch fixes that by marking kfd_process->ef as an __rcu pointer. The only place that was dereferencing it directly was kfd_process_wq_release, where I added rcu_dereference_protected. The condition I'm using here is, that the process ref count is 0 at that point, which means nobody else is referencing the process or this fence pointer at the time.

Hi Christian,

We discussed offline that you think rcu_dereference_protected is not needed in the teardown function. After reading over rcupdate.h, I think a simpler alternative would be to use rcu_access_pointer, after a grace period to ensure there can be no more readers. Based on this comment in rcupdate.h:

 * It is also permissible to use rcu_access_pointer() when read-side
 * access to the pointer was removed at least one grace period ago, as is
 * the case in the context of the RCU callback that is freeing up the data,
 * or after a synchronize_rcu() returns.  This can be useful when tearing
 * down multi-linked structures after a grace period has elapsed.  However,
 * rcu_dereference_protected() is normally preferred for this use case.

The last sentence sounds like rcu_dereference_protected should also be OK, though. Either way, it sounds like I need to add a synchronize_rcu call in any case, before freeing the fence. Do you agree with this proposal?

Regards,
  Felix



Regards,
  Felix



Regards,
Christian.


Thanks,
  Felix



---
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++--
  drivers/gpu/drm/amd/amdkfd/kfd_priv.h            | 2 +-
  drivers/gpu/drm/amd/amdkfd/kfd_process.c         | 6 ++++--
  4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index f2e920734c98..20cb266dcedd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -314,7 +314,7 @@ void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem);
  int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_device *adev, struct amdgpu_bo *bo);
    int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
-                        struct dma_fence **ef);
+                        struct dma_fence __rcu **ef);
  int amdgpu_amdkfd_gpuvm_get_vm_fault_info(struct amdgpu_device *adev,
                            struct kfd_vm_fault_info *info);
  int amdgpu_amdkfd_gpuvm_import_dmabuf_fd(struct amdgpu_device *adev, int fd,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 7d91f99acb59..8ba6f6c8363d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -2806,7 +2806,7 @@ static void amdgpu_amdkfd_restore_userptr_worker(struct work_struct *work)
      put_task_struct(usertask);
  }
  -static void replace_eviction_fence(struct dma_fence **ef,
+static void replace_eviction_fence(struct dma_fence __rcu **ef,
                     struct dma_fence *new_ef)
  {
      struct dma_fence *old_ef = rcu_replace_pointer(*ef, new_ef, true
@@ -2841,7 +2841,7 @@ static void replace_eviction_fence(struct dma_fence **ef,
   * 7.  Add fence to all PD and PT BOs.
   * 8.  Unreserve all BOs
   */
-int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
+int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu **ef)
  {
      struct amdkfd_process_info *process_info = info;
      struct amdgpu_vm *peer_vm;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 45366b4ca976..5a24097a9f28 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -917,7 +917,7 @@ struct kfd_process {
       * fence will be triggered during eviction and new one will be created
       * during restore
       */
-    struct dma_fence *ef;
+    struct dma_fence __rcu *ef;
        /* Work items for evicting and restoring BOs */
      struct delayed_work eviction_work;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index 71df51fcc1b0..14b11d61f8dd 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -1110,6 +1110,8 @@ static void kfd_process_wq_release(struct work_struct *work)
  {
      struct kfd_process *p = container_of(work, struct kfd_process,
                           release_work);
+    struct dma_fence *ef = rcu_dereference_protected(p->ef,
+        kref_read(&p->ref) == 0);
        kfd_process_dequeue_from_all_devices(p);
      pqm_uninit(&p->pqm);
@@ -1118,7 +1120,7 @@ static void kfd_process_wq_release(struct work_struct *work)
       * destroyed. This allows any BOs to be freed without
       * triggering pointless evictions or waiting for fences.
       */
-    dma_fence_signal(p->ef);
+    dma_fence_signal(ef);
        kfd_process_remove_sysfs(p);
  @@ -1127,7 +1129,7 @@ static void kfd_process_wq_release(struct work_struct *work)
      svm_range_list_fini(p);
        kfd_process_destroy_pdds(p);
-    dma_fence_put(p->ef);
+    dma_fence_put(ef);
        kfd_event_free_process(p);


--------------kyKS40pYdhyQbwE7EUIGXQx2--