From nobody Wed Apr 06 17:46:01 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 976811AA618C; Wed, 6 Apr 2022 17:46:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KYX493VzYz3DX8; Wed, 6 Apr 2022 17:46:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649267161; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4cLzjbKSSwdTtgcPu0dkmdDYIQBJ6LOCEvigicJqZfk=; b=MeS+7CMmC/dcm7po5Q7cDPsLhVBC/gW2SAzeZJbIfCE4ShaakB/EJT8n0GJlavGanc3k/w HbPwo4zJttfdetSEdvCKzpUs3PYkeCtjjU3xmvr+HPhdAOjc4EvZvkrsCuDBG+7FmnTUsy eP4M1IfVoBqn7hcf5sA0hGTd+9wPMjmWWuOtduGRHREdrMKHgqkGRethhDiCCrdxbrVq3j vJuukRTiW6FUrIzA1r0BZHF6jbOohauJ6Vjen4YImN60woAThuAI3i9EWxPzYkXq0db+fz gLc1JzyhakcZI+EbezAXCIRp/2yfIo5U/uo0jqW34vLfjVd+/GgYbEGrqfY3Mw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 52E3A1FBC1; Wed, 6 Apr 2022 17:46:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 236Hk1JJ022530; Wed, 6 Apr 2022 17:46:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 236Hk1oP022529; Wed, 6 Apr 2022 17:46:01 GMT (envelope-from git) Date: Wed, 6 Apr 2022 17:46:01 GMT Message-Id: <202204061746.236Hk1oP022529@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 6615aa8e1b3d - releng/13.1 - linuxkpi: Restore the KBI for struct pci_driver List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.1 X-Git-Reftype: branch X-Git-Commit: 6615aa8e1b3de544772f6bd40d791cfe468fa15c Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649267161; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4cLzjbKSSwdTtgcPu0dkmdDYIQBJ6LOCEvigicJqZfk=; b=O/gzpBpp0WdmQfAvD70097e2kj2bN979Yk9+c4j0L0RKoVZcbpap2O2oq7i+0Eb/qoL/kH /bMj6MRmC53dAmkIVtlG63aqCuQepuXyM5/h+dbZw7JyvalLZsFAjMtjnvR5eHTGjsPAQU HTos+zAB50pnG7KNTSPuPxjuBbNZH5qKi0uPGKjApFU/RQasdSEgFRN56igtLClEkBxa6X TQaOcLyIsvjmPGCL7jdUuVS1ICfX3fIAvT7MC+EZagyGtD7RFD5yxDe/yf56wW3MvFrnpG BSlwTq3nFWL3xl+elNOrWHX0F+yBTkRrlfpRTzTmc9jE1T+7gpfbwnweLz49+Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1649267161; a=rsa-sha256; cv=none; b=UeNJquOf6akl5MJIDY+HKHhyEw2Cfo2DKoiDkGcfinxwq0gDlKHMQgrKwnRl+lO4gbIHgB u5xTDPtqcs/pOFKy8yChYeXj2i7fbQdDJIYgaEA/o/M0ht1mZOzJ6QTYJUwhE7Lvd4Xk8l /zNjdH84KuK3cBUfqAYpL57LnVaiwxKOevjvS2Ee8OmTillFS65gLI0Lx3DgKo3agIZ7P5 fC5iyhkc6KnjOrCd/kMcBL8q2HiuO0A4MsvD4OEDAQANd0zEyIkuWmxtVvuhDzEZmu/X5w k3zCc0jNDtePg0R+jYAGmwbso2dRPsaeYOl/n5tPpgoyR73IdMFlV1dU12HSnQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch releng/13.1 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=6615aa8e1b3de544772f6bd40d791cfe468fa15c commit 6615aa8e1b3de544772f6bd40d791cfe468fa15c Author: Warner Losh AuthorDate: 2022-04-02 19:52:53 +0000 Commit: Warner Losh CommitDate: 2022-04-06 17:44:54 +0000 linuxkpi: Restore the KBI for struct pci_driver The size of the 13.0 version of struct pci_driver was 92 or 184 bytes on 32- or 64-bit systems respectively. We recently added bsd_probe_return at the end of this struct, breaking the KBI on the stable/13 branch. Fix this by removing the isdrm member. We don't need it because we can do a strcmp in the few places that need it as they aren't performance critical. Move the newly added bsd_probe_return to that slot. It's the same size in all our supported KBIs as bool and fits into that slot due to padding rules. Direct commit to stable/13 because this is not relevant to main. Approved by: re@ (gjb) Sponsored by: Netflix Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D34754 (cherry picked from commit aa61c28b4242ce3f86f1ae7807ae95887cbe9d11) --- sys/compat/linuxkpi/common/include/linux/pci.h | 3 +-- sys/compat/linuxkpi/common/src/linux_pci.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/pci.h b/sys/compat/linuxkpi/common/include/linux/pci.h index eb5f46a4879c..7afe426d6b52 100644 --- a/sys/compat/linuxkpi/common/include/linux/pci.h +++ b/sys/compat/linuxkpi/common/include/linux/pci.h @@ -229,13 +229,12 @@ struct pci_driver { devclass_t bsdclass; struct device_driver driver; const struct pci_error_handlers *err_handler; - bool isdrm; + int bsd_probe_return; int (*bsd_iov_init)(device_t dev, uint16_t num_vfs, const nvlist_t *pf_config); void (*bsd_iov_uninit)(device_t dev); int (*bsd_iov_add_vf)(device_t dev, uint16_t vfnum, const nvlist_t *vf_config); - int bsd_probe_return; }; struct pci_bus { diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c index 0734acac60ac..0e952c17d7f7 100644 --- a/sys/compat/linuxkpi/common/src/linux_pci.c +++ b/sys/compat/linuxkpi/common/src/linux_pci.c @@ -119,6 +119,12 @@ struct linux_dma_priv { #define DMA_PRIV_LOCK(priv) mtx_lock(&(priv)->lock) #define DMA_PRIV_UNLOCK(priv) mtx_unlock(&(priv)->lock) +static bool +linux_is_drm(struct pci_driver *pdrv) +{ + return (pdrv->name != NULL && strcmp(pdrv->name, "drmn") == 0); +} + static int linux_pdev_dma_uninit(struct pci_dev *pdev) { @@ -405,7 +411,7 @@ linux_pci_attach_device(device_t dev, struct pci_driver *pdrv, linux_set_current(curthread); parent = device_get_parent(dev); - isdrm = pdrv != NULL && pdrv->isdrm; + isdrm = pdrv != NULL && linux_is_drm(pdrv); if (isdrm) { struct pci_devinfo *dinfo; @@ -674,7 +680,6 @@ linux_pci_register_driver(struct pci_driver *pdrv) dc = devclass_find("pci"); if (dc == NULL) return (-ENXIO); - pdrv->isdrm = false; return (_linux_pci_register_driver(pdrv, dc)); } @@ -688,7 +693,7 @@ linux_pci_reserve_bar(struct pci_dev *pdev, struct resource_list *rl, KASSERT(type == SYS_RES_IOPORT || type == SYS_RES_MEMORY, ("trying to reserve non-BAR type %d", type)); - dev = pdev->pdrv != NULL && pdev->pdrv->isdrm ? + dev = pdev->pdrv != NULL && linux_is_drm(pdev->pdrv) ? device_get_parent(pdev->dev.bsddev) : pdev->dev.bsddev; res = pci_reserve_map(device_get_parent(dev), dev, type, &rid, 0, ~0, 1, 1, 0); @@ -706,7 +711,7 @@ pci_resource_start(struct pci_dev *pdev, int bar) if ((rle = linux_pci_get_bar(pdev, bar, true)) == NULL) return (0); - dev = pdev->pdrv != NULL && pdev->pdrv->isdrm ? + dev = pdev->pdrv != NULL && linux_is_drm(pdev->pdrv) ? device_get_parent(pdev->dev.bsddev) : pdev->dev.bsddev; if (BUS_TRANSLATE_RESOURCE(dev, rle->type, rle->start, &newstart)) { device_printf(pdev->dev.bsddev, "translate of %#jx failed\n", @@ -734,7 +739,6 @@ linux_pci_register_drm_driver(struct pci_driver *pdrv) dc = devclass_create("vgapci"); if (dc == NULL) return (-ENXIO); - pdrv->isdrm = true; pdrv->name = "drmn"; return (_linux_pci_register_driver(pdrv, dc)); }