From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6DC913D891 for ; Sat, 13 Jun 2026 08:17:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781338638; cv=none; b=groUB0BvhB9FFbfE3EDbi30A9pqvfR1GgfAqKYyIcjKbFIvVdSadSlqlPY/lFi+Nl5fonx1USTeuphyhz9YJMGmfhpfAeP1VZuc0GNt+3eGPTlBxEBN3UHThKwXvrTRrMjxM6YpYq53XZjixet02VuF7rk5o38/pJyIrFND1/0Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781338638; c=relaxed/simple; bh=G4vZBc8ZLUPUE5upL5hARAo5Vznl/2YxfVZfkWN3zUM=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=DviWSlKMTmnEUtNrNmKR1i+9cPMibePDR3komOMXzchCDIytbFBrgEtfLI5uwVZRcYG1iQUYlpcn23oHHwzARAbzWKxjofY/5ukqfZazm6Zp8xIeNXPg5VGGS74kbhl709Tl751yWGManjJJllzYtluiBcxnO9Y5lQd3IzOaHJs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=e4r1cuCb; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=pDqkIWkg; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="e4r1cuCb"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="pDqkIWkg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1781338635; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YS0zNMZBIRupuxM8vXWdAOrpg+vXBR7TRgikpV9JDpU=; b=e4r1cuCbKy4Q+WlUvD3GG/g0suTzvMPw8ypep/N3BReV/j8Sydh3ZSuXqLDV8W/7voEs+k Y+ZeeaFFE/eRkH0ZqOQpHb4JfD27A0j4rqz0Q+kw2EcNPjaCBuIFXwC9N8M7IvQf2XWLjc n7CHTQynMIUPQeLJpHND4aqMzGY11sY= Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-589-K8GwgHwJM8u6h1pm4BJ1aA-1; Sat, 13 Jun 2026 04:17:14 -0400 X-MC-Unique: K8GwgHwJM8u6h1pm4BJ1aA-1 X-Mimecast-MFC-AGG-ID: K8GwgHwJM8u6h1pm4BJ1aA_1781338633 Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-8ccf62978bfso40850166d6.1 for ; Sat, 13 Jun 2026 01:17:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1781338633; x=1781943433; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=YS0zNMZBIRupuxM8vXWdAOrpg+vXBR7TRgikpV9JDpU=; b=pDqkIWkg1NbqVcicFBMP/cJfkI2Qx/a3zqVY4rtz6wpoZnBI8PuM27B9vYBI4fuVEU LFNHQ19RUZsBywSSFM1OHjHQYd47YB8TOwISpt4OH66YGa2dVJQp8si1Pvvty03ARgJM JMciWvPTGawbOnLUGQUHXAfDrtdTC36kORDyCNivMpBUkt21gMqGCldPkPBrO4HemKmX qMprhvrBDkxzSb/3gpu8NS356phlEogt+V56Pmj3wqGvafZr0WSY82K/SXG/6Zoj470N WvmX36CrIDyjDEYcQZFSqMLl6pKKLfnk3IrhISAG72jMFaUG53cm3JpIMpVQxqISY+z9 sqxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781338633; x=1781943433; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YS0zNMZBIRupuxM8vXWdAOrpg+vXBR7TRgikpV9JDpU=; b=J3kohQyeSlhbiH1b2Z+AU7OKjhLCusteV06vl47dzscGAtZamB/GdYAnO/wlYT/djA bPxQZ6Nxm8YLmPpcfCzERs9qNxyKcaPfw9T4mFI+HyyBKaRN1LKxi+c0nFOrFmbFiYUs l0B0m9MfRcYsgFzQAWL3MedX+AfhBQXoEwm5/GnCXdgBf7opminqz4IlQcOcozUIY7F0 NoIEe/Qf1nr4oOaaxNh1NVPBvBTmF42tbD+yZ481jM/BtNEHc9C9wGzz6TV+f7CuBdb5 mtO18m30q73udzTbxpbhJH4kSvv2JI00OMTWq6BIB221Zbg1OKYGAwW9hSPakuMNHVnH zN9Q== X-Forwarded-Encrypted: i=1; AFNElJ9MGz3JsZIdX9o9jLSJUjIeAPzfNJlK+cBrYcaUZkPSfYTBmoLjtk/ULQ4PLkOouH6j118CtVEQFfaP8mo=@vger.kernel.org X-Gm-Message-State: AOJu0YzMMklb1c8Fbl+LuSFEi8oWV/FvCqwBPP/nyFGv7zZH6OwlIaNl eHEltWws3+O79AnqX9RkeHjUZC3pd60CgPm/V/GH4fvHDW58+TMjVzEHweB7+/mbx5MwC00vcdy JxxuYwiS47/HKoVdcGsH9OMtycep40/pDxiz7AnOq9j3nPoAsbU7084diWceUCO4HXT/SolMO+w == X-Gm-Gg: Acq92OEF6x3sOtSRhGxkjZvIuMDYsUTKcMRXTqTI+QG4EMjDoPHnI2GLrZbQbEtxwv1 yCLrAvSP4B8IDG/iVk9SFB0MUTmeKjUtqz85cMaZ9Sv1UasboQMiW0Kg3UfUW9vQEMljL5f00FK E65cUSSg/7xoSzXZaGeV8M50UAuDurGkz65BVTzLfIOfXTGnM8Hk1YuCbGe0trmG+U1GUnOFwHT TaXjAJ+JS6I3uytsUCD0zWhwAQPYGXrId0zt3TyMd+ubOUkJRxbzGgpo/D40iz8s5I0erKywFNZ dIK0GnoYWmQFfRahjIxSJViBoY5g+JVDoUVhsRPQZMvyouvFFqr/56QOcruwthP+9hVFGJ4Og8G 7irSelBzE4Fd1KVtPsdCQzIs4TZV3FoA+oWQbgCq3fqvbZ5M3k4nB7pw= X-Received: by 2002:a05:6214:2249:b0:8b9:3907:166a with SMTP id 6a1803df08f44-8d32c8ce11cmr102409586d6.17.1781338633468; Sat, 13 Jun 2026 01:17:13 -0700 (PDT) X-Received: by 2002:a05:6214:2249:b0:8b9:3907:166a with SMTP id 6a1803df08f44-8d32c8ce11cmr102409346d6.17.1781338632991; Sat, 13 Jun 2026 01:17:12 -0700 (PDT) Received: from [192.168.88.32] ([150.228.25.72]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8d301b2d004sm47099976d6.15.2026.06.13.01.17.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jun 2026 01:17:12 -0700 (PDT) Message-ID: <9166857f-880d-4324-9300-9cb1da600aed@redhat.com> Date: Sat, 13 Jun 2026 10:17:09 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 5/6] pds_core: add host backed memory support for firmware To: "Nikhil P. Rao" , netdev@vger.kernel.org Cc: Brett Creeley , Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , linux-kernel@vger.kernel.org, Eric Joyner , Vamsi Atluri References: <20260608223256.12357-1-nikhil.rao@amd.com> <20260608223256.12357-6-nikhil.rao@amd.com> From: Paolo Abeni Content-Language: en-US In-Reply-To: <20260608223256.12357-6-nikhil.rao@amd.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 6/9/26 12:32 AM, Nikhil P. Rao wrote: > +static int pdsc_host_mem_add_one(struct pdsc *pdsc, int index) > +{ > + struct pdsc_host_mem *hm = &pdsc->host_mem_reqs[index]; > + union pds_core_dev_comp comp = {}; > + union pds_core_dev_cmd cmd = {}; > + int err; > + > + memset(hm, 0, sizeof(*hm)); Minor nit: the buffer is kzmalloced() no need to zero it again. > + cmd.host_mem.opcode = PDS_CORE_CMD_HOST_MEM; > + cmd.host_mem.oper = PDS_CORE_HOST_MEM_QUERY; > + cmd.host_mem.index = cpu_to_le16(index); > + dev_dbg(pdsc->dev, "Sending devcmd for mem query index %d\n", index); > + err = pdsc_devcmd(pdsc, &cmd, &comp, pdsc->devcmd_timeout); > + if (err || comp.status != PDS_RC_SUCCESS) { > + dev_err(pdsc->dev, "mem query failed err %d status %d\n", > + err, comp.status); > + return err ? err : -EIO; > + } > + hm->size = le32_to_cpu(comp.host_mem.size); > + hm->tag = le16_to_cpu(comp.host_mem.tag); > + dev_dbg(pdsc->dev, "mem query returned size %d tag %d\n", > + hm->size, hm->tag); > + > + if (!hm->size || hm->size > PDSC_HOST_MEM_MAX_CONTIG) { > + dev_err(pdsc->dev, "invalid size %d for tag %d\n", > + hm->size, hm->tag); > + err = -EINVAL; > + goto err_del; > + } > + > + hm->order = get_order(hm->size); > + hm->pg = alloc_pages(GFP_KERNEL | __GFP_ZERO | __GFP_NOWARN, hm->order); > + if (!hm->pg) { > + dev_err(pdsc->dev, "alloc order %d failed for tag %d\n", > + hm->order, hm->tag); Minor nit: as this is a gracefully handled failure, possibly dev_warn() is more suited and the message itself should be less alarming. [...] > +void pdsc_host_mem_add(struct pdsc *pdsc) > +{ > + union pds_core_dev_comp comp = {}; > + union pds_core_dev_cmd cmd = {}; > + u16 count; > + int err; > + int i; > + > + if (!(pdsc->dev_ident.capabilities & > + cpu_to_le64(PDS_CORE_DEV_CAP_HOST_MEM))) > + return; > + > + cmd.host_mem.opcode = PDS_CORE_CMD_HOST_MEM; > + cmd.host_mem.oper = PDS_CORE_HOST_MEM_GET_COUNT; > + cmd.host_mem.index = cpu_to_le16(PDSC_HOST_MEM_MAX_COUNT); > + cmd.host_mem.max_contig = cpu_to_le32(PDSC_HOST_MEM_MAX_CONTIG); > + dev_dbg(pdsc->dev, "Sending devcmd for mem get count max_contig %u\n", > + PDSC_HOST_MEM_MAX_CONTIG); > + err = pdsc_devcmd(pdsc, &cmd, &comp, pdsc->devcmd_timeout); > + if (err || comp.status != PDS_RC_SUCCESS) { > + dev_err(pdsc->dev, "mem get count failed err %d status %d\n", > + err, comp.status); > + return; > + } > + > + count = min(le16_to_cpu(comp.host_mem.count), > + PDSC_HOST_MEM_MAX_COUNT); > + dev_dbg(pdsc->dev, "mem get count returned count %d\n", count); > + if (count == 0) > + return; > + > + pdsc->host_mem_reqs = kzalloc_objs(*pdsc->host_mem_reqs, count, > + GFP_KERNEL); > + if (!pdsc->host_mem_reqs) { > + dev_err(pdsc->dev, "failed to alloc host_mem_reqs array\n"); > + return; > + } > + > + for (i = 0; i < count; i++) { > + err = pdsc_host_mem_add_one(pdsc, i); > + if (err) > + break; When pdsc_host_mem_add_one() returns an error, pdsc->host_mem_reqs[i].pg will be zero. Errors are not propagate to the caller... > + } > +} > + > +void pdsc_host_mem_free(struct pdsc *pdsc) > +{ > + int i; > + > + if (!pdsc->host_mem_reqs) > + return; ... and this function will be unconditionally called on shutdown with non zero host_mem_reqs. > + > + for (i = 0; i < pdsc->num_host_mem_reqs; i++) { > + dma_unmap_page(pdsc->dev, pdsc->host_mem_reqs[i].pa, > + pdsc->host_mem_reqs[i].size, > + DMA_BIDIRECTIONAL); > + __free_pages(pdsc->host_mem_reqs[i].pg, so pdsc->host_mem_reqs[i].pg can be zero here. AFAICS at least __free_pages() -> ___free_pages -> put_page_testzero -> page_ref_count(0) will oops. I find strange AI did not catch the above, so I'm possibly missing something?!? /P