Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751178AbdCNNK7 (ORCPT ); Tue, 14 Mar 2017 09:10:59 -0400 Received: from mga07.intel.com ([134.134.136.100]:15743 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750860AbdCNNJv (ORCPT ); Tue, 14 Mar 2017 09:09:51 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,163,1486454400"; d="gz'50?scan'50,208,50";a="944128305" Date: Tue, 14 Mar 2017 21:09:31 +0800 From: kbuild test robot To: Christian =?iso-8859-1?Q?K=F6nig?= Cc: kbuild-all@01.org, helgaas@kernel.org, linux-pci@vger.kernel.org, dri-devel@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/4] PCI: add resizeable BAR infrastructure v3 Message-ID: <201703142151.O3cDCh40%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="FCuugMFkClbJLl1L" Content-Disposition: inline In-Reply-To: <1489408896-25039-2-git-send-email-deathsimple@vodafone.de> User-Agent: Mutt/1.5.23 (2014-03-12) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: fengguang.wu@intel.com X-SA-Exim-Scanned: No (on bee); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 13600 Lines: 251 --FCuugMFkClbJLl1L Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Christian, [auto build test WARNING on pci/next] [also build test WARNING on v4.11-rc2 next-20170310] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Christian-K-nig/PCI-add-resizeable-BAR-infrastructure-v3/20170314-163334 base: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git next reproduce: make htmldocs All warnings (new ones prefixed by >>): lib/crc32.c:148: warning: No description found for parameter 'tab)[256]' lib/crc32.c:148: warning: Excess function parameter 'tab' description in 'crc32_le_generic' lib/crc32.c:293: warning: No description found for parameter 'tab)[256]' lib/crc32.c:293: warning: Excess function parameter 'tab' description in 'crc32_be_generic' lib/crc32.c:1: warning: no structured comments found >> drivers/pci/pci.c:2951: warning: No description found for parameter 'pdev' >> drivers/pci/pci.c:2951: warning: Excess function parameter 'dev' description in 'pci_rbar_get_possible_sizes' drivers/pci/pci.c:2989: warning: No description found for parameter 'pdev' >> drivers/pci/pci.c:2989: warning: Excess function parameter 'dev' description in 'pci_rbar_get_current_size' drivers/pci/pci.c:3027: warning: No description found for parameter 'pdev' >> drivers/pci/pci.c:3027: warning: Excess function parameter 'dev' description in 'pci_rbar_set_size' vim +/pdev +2951 drivers/pci/pci.c 2945 * @bar: BAR to query 2946 * 2947 * Get the possible sizes of a resizeable BAR as bitmask defined in the spec 2948 * (bit 0=1MB, bit 19=512GB). Returns 0 if BAR isn't resizeable. 2949 */ 2950 u32 pci_rbar_get_possible_sizes(struct pci_dev *pdev, int bar) > 2951 { 2952 unsigned pos, nbars; 2953 u32 ctrl, cap; 2954 unsigned i; 2955 2956 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_REBAR); 2957 if (!pos) 2958 return 0; 2959 2960 pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl); 2961 nbars = (ctrl & PCI_REBAR_CTRL_NBAR_MASK) >> PCI_REBAR_CTRL_NBAR_SHIFT; 2962 2963 for (i = 0; i < nbars; ++i, pos += 8) { 2964 int bar_idx; 2965 2966 pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl); 2967 bar_idx = (ctrl & PCI_REBAR_CTRL_BAR_IDX_MASK) >> 2968 PCI_REBAR_CTRL_BAR_IDX_SHIFT; 2969 if (bar_idx != bar) 2970 continue; 2971 2972 pci_read_config_dword(pdev, pos + PCI_REBAR_CAP, &cap); 2973 return (cap & PCI_REBAR_CTRL_SIZES_MASK) >> 2974 PCI_REBAR_CTRL_SIZES_SHIFT; 2975 } 2976 2977 return 0; 2978 } 2979 2980 /** 2981 * pci_rbar_get_current_size - get the current size of a BAR 2982 * @dev: PCI device 2983 * @bar: BAR to set size to 2984 * 2985 * Read the size of a BAR from the resizeable BAR config. 2986 * Returns size if found or negativ error code. 2987 */ 2988 int pci_rbar_get_current_size(struct pci_dev *pdev, int bar) > 2989 { 2990 unsigned pos, nbars; 2991 u32 ctrl; 2992 unsigned i; 2993 2994 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_REBAR); 2995 if (!pos) 2996 return -ENOTSUPP; 2997 2998 pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl); 2999 nbars = (ctrl & PCI_REBAR_CTRL_NBAR_MASK) >> PCI_REBAR_CTRL_NBAR_SHIFT; 3000 3001 for (i = 0; i < nbars; ++i, pos += 8) { 3002 int bar_idx; 3003 3004 pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl); 3005 bar_idx = (ctrl & PCI_REBAR_CTRL_BAR_IDX_MASK) >> 3006 PCI_REBAR_CTRL_BAR_IDX_SHIFT; 3007 if (bar_idx != bar) 3008 continue; 3009 3010 return (ctrl & PCI_REBAR_CTRL_BAR_SIZE_MASK) >> 3011 PCI_REBAR_CTRL_BAR_SIZE_SHIFT; 3012 } 3013 3014 return -ENOENT; 3015 } 3016 3017 /** 3018 * pci_rbar_set_size - set a new size for a BAR 3019 * @dev: PCI device 3020 * @bar: BAR to set size to 3021 * @size: new size as defined in the spec (log2(size in bytes) - 20) 3022 * 3023 * Set the new size of a BAR as defined in the spec (0=1MB, 19=512GB). 3024 * Returns true if resizing was successful, false otherwise. 3025 */ 3026 int pci_rbar_set_size(struct pci_dev *pdev, int bar, int size) > 3027 { 3028 unsigned pos, nbars; 3029 u32 ctrl; 3030 unsigned i; --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --FCuugMFkClbJLl1L Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --FCuugMFkClbJLl1L--