[radeon-alex:drm-next 655/663] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:802:6: warning: no previous prototype for function 'kgd_gfx_v9_get_cu_occupancy'
kernel test robot
lkp at intel.com
Thu Nov 5 04:50:37 UTC 2020
tree: git://people.freedesktop.org/~agd5f/linux.git drm-next
head: 57673be0a9f5ef814f8a9699abdb480886fa4c0c
commit: aeee2a48ec9239790b7c9a5c14dfb2a12554322f [655/663] drm/amd/amdgpu: Enable arcturus devices to access the method kgd_gfx_v9_get_cu_occupancy that is already defined
config: x86_64-randconfig-a005-20201104 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 09ec07827b1128504457a93dee80b2ceee1af600)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git
git fetch --no-tags radeon-alex drm-next
git checkout aeee2a48ec9239790b7c9a5c14dfb2a12554322f
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:94:6: warning: no previous prototype for function 'kgd_gfx_v9_program_sh_mem_settings' [-Wmissing-prototypes]
void kgd_gfx_v9_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:94:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void kgd_gfx_v9_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:111:5: warning: no previous prototype for function 'kgd_gfx_v9_set_pasid_vmid_mapping' [-Wmissing-prototypes]
int kgd_gfx_v9_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:111:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:172:5: warning: no previous prototype for function 'kgd_gfx_v9_init_interrupts' [-Wmissing-prototypes]
int kgd_gfx_v9_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:172:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:234:5: warning: no previous prototype for function 'kgd_gfx_v9_hqd_load' [-Wmissing-prototypes]
int kgd_gfx_v9_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:234:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:314:5: warning: no previous prototype for function 'kgd_gfx_v9_hiq_mqd_load' [-Wmissing-prototypes]
int kgd_gfx_v9_hiq_mqd_load(struct kgd_dev *kgd, void *mqd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:314:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_hiq_mqd_load(struct kgd_dev *kgd, void *mqd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:367:5: warning: no previous prototype for function 'kgd_gfx_v9_hqd_dump' [-Wmissing-prototypes]
int kgd_gfx_v9_hqd_dump(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:367:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_hqd_dump(struct kgd_dev *kgd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:501:6: warning: no previous prototype for function 'kgd_gfx_v9_hqd_is_occupied' [-Wmissing-prototypes]
bool kgd_gfx_v9_hqd_is_occupied(struct kgd_dev *kgd, uint64_t queue_address,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:501:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
bool kgd_gfx_v9_hqd_is_occupied(struct kgd_dev *kgd, uint64_t queue_address,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:542:5: warning: no previous prototype for function 'kgd_gfx_v9_hqd_destroy' [-Wmissing-prototypes]
int kgd_gfx_v9_hqd_destroy(struct kgd_dev *kgd, void *mqd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:542:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_hqd_destroy(struct kgd_dev *kgd, void *mqd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:632:6: warning: no previous prototype for function 'kgd_gfx_v9_get_atc_vmid_pasid_mapping_info' [-Wmissing-prototypes]
bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:632:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:645:5: warning: no previous prototype for function 'kgd_gfx_v9_address_watch_disable' [-Wmissing-prototypes]
int kgd_gfx_v9_address_watch_disable(struct kgd_dev *kgd)
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:645:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_address_watch_disable(struct kgd_dev *kgd)
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:650:5: warning: no previous prototype for function 'kgd_gfx_v9_address_watch_execute' [-Wmissing-prototypes]
int kgd_gfx_v9_address_watch_execute(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:650:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_address_watch_execute(struct kgd_dev *kgd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:659:5: warning: no previous prototype for function 'kgd_gfx_v9_wave_control_execute' [-Wmissing-prototypes]
int kgd_gfx_v9_wave_control_execute(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:659:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int kgd_gfx_v9_wave_control_execute(struct kgd_dev *kgd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:684:10: warning: no previous prototype for function 'kgd_gfx_v9_address_watch_get_offset' [-Wmissing-prototypes]
uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:684:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
^
static
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:691:6: warning: no previous prototype for function 'kgd_gfx_v9_set_vm_context_page_table_base' [-Wmissing-prototypes]
void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:691:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd,
^
static
>> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:802:6: warning: no previous prototype for function 'kgd_gfx_v9_get_cu_occupancy' [-Wmissing-prototypes]
void kgd_gfx_v9_get_cu_occupancy(struct kgd_dev *kgd, int pasid,
^
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c:802:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void kgd_gfx_v9_get_cu_occupancy(struct kgd_dev *kgd, int pasid,
^
static
15 warnings generated.
vim +/kgd_gfx_v9_get_cu_occupancy +802 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
755
756 /**
757 * @kgd_gfx_v9_get_cu_occupancy: Reads relevant registers associated with each
758 * shader engine and aggregates the number of waves that are in flight for the
759 * process whose pasid is provided as a parameter. The process could have ZERO
760 * or more queues running and submitting waves to compute units.
761 *
762 * @kgd: Handle of device from which to get number of waves in flight
763 * @pasid: Identifies the process for which this query call is invoked
764 * @wave_cnt: Output parameter updated with number of waves in flight that
765 * belong to process with given pasid
766 * @max_waves_per_cu: Output parameter updated with maximum number of waves
767 * possible per Compute Unit
768 *
769 * @note: It's possible that the device has too many queues (oversubscription)
770 * in which case a VMID could be remapped to a different PASID. This could lead
771 * to an iaccurate wave count. Following is a high-level sequence:
772 * Time T1: vmid = getVmid(); vmid is associated with Pasid P1
773 * Time T2: passId = getPasId(vmid); vmid is associated with Pasid P2
774 * In the sequence above wave count obtained from time T1 will be incorrectly
775 * lost or added to total wave count.
776 *
777 * The registers that provide the waves in flight are:
778 *
779 * SPI_CSQ_WF_ACTIVE_STATUS - bit-map of queues per pipe. The bit is ON if a
780 * queue is slotted, OFF if there is no queue. A process could have ZERO or
781 * more queues slotted and submitting waves to be run on compute units. Even
782 * when there is a queue it is possible there could be zero wave fronts, this
783 * can happen when queue is waiting on top-of-pipe events - e.g. waitRegMem
784 * command
785 *
786 * For each bit that is ON from above:
787 *
788 * Read (SPI_CSQ_WF_ACTIVE_COUNT_0 + queue_idx) register. It provides the
789 * number of waves that are in flight for the queue at specified index. The
790 * index ranges from 0 to 7.
791 *
792 * If non-zero waves are in flight, read CP_HQD_VMID register to obtain VMID
793 * of the wave(s).
794 *
795 * Determine if VMID from above step maps to pasid provided as parameter. If
796 * it matches agrregate the wave count. That the VMID will not match pasid is
797 * a normal condition i.e. a device is expected to support multiple queues
798 * from multiple proceses.
799 *
800 * Reading registers referenced above involves programming GRBM appropriately
801 */
> 802 void kgd_gfx_v9_get_cu_occupancy(struct kgd_dev *kgd, int pasid,
803 int *pasid_wave_cnt, int *max_waves_per_cu)
804 {
805 int qidx;
806 int vmid;
807 int se_idx;
808 int sh_idx;
809 int se_cnt;
810 int sh_cnt;
811 int wave_cnt;
812 int queue_map;
813 int pasid_tmp;
814 int max_queue_cnt;
815 int vmid_wave_cnt = 0;
816 struct amdgpu_device *adev;
817 DECLARE_BITMAP(cp_queue_bitmap, KGD_MAX_QUEUES);
818
819 adev = get_amdgpu_device(kgd);
820 lock_spi_csq_mutexes(adev);
821 soc15_grbm_select(adev, 1, 0, 0, 0);
822
823 /*
824 * Iterate through the shader engines and arrays of the device
825 * to get number of waves in flight
826 */
827 bitmap_complement(cp_queue_bitmap, adev->gfx.mec.queue_bitmap,
828 KGD_MAX_QUEUES);
829 max_queue_cnt = adev->gfx.mec.num_pipe_per_mec *
830 adev->gfx.mec.num_queue_per_pipe;
831 sh_cnt = adev->gfx.config.max_sh_per_se;
832 se_cnt = adev->gfx.config.max_shader_engines;
833 for (se_idx = 0; se_idx < se_cnt; se_idx++) {
834 for (sh_idx = 0; sh_idx < sh_cnt; sh_idx++) {
835
836 gfx_v9_0_select_se_sh(adev, se_idx, sh_idx, 0xffffffff);
837 queue_map = RREG32(SOC15_REG_OFFSET(GC, 0,
838 mmSPI_CSQ_WF_ACTIVE_STATUS));
839
840 /*
841 * Assumption: queue map encodes following schema: four
842 * pipes per each micro-engine, with each pipe mapping
843 * eight queues. This schema is true for GFX9 devices
844 * and must be verified for newer device families
845 */
846 for (qidx = 0; qidx < max_queue_cnt; qidx++) {
847
848 /* Skip qeueus that are not associated with
849 * compute functions
850 */
851 if (!test_bit(qidx, cp_queue_bitmap))
852 continue;
853
854 if (!(queue_map & (1 << qidx)))
855 continue;
856
857 /* Get number of waves in flight and aggregate them */
858 get_wave_count(adev, qidx, &wave_cnt, &vmid);
859 if (wave_cnt != 0) {
860 pasid_tmp =
861 RREG32(SOC15_REG_OFFSET(OSSSYS, 0,
862 mmIH_VMID_0_LUT) + vmid);
863 if (pasid_tmp == pasid)
864 vmid_wave_cnt += wave_cnt;
865 }
866 }
867 }
868 }
869
870 gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
871 soc15_grbm_select(adev, 0, 0, 0, 0);
872 unlock_spi_csq_mutexes(adev);
873
874 /* Update the output parameters and return */
875 *pasid_wave_cnt = vmid_wave_cnt;
876 *max_waves_per_cu = adev->gfx.cu_info.simd_per_cu *
877 adev->gfx.cu_info.max_waves_per_simd;
878 }
879
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 35326 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20201105/b5556a82/attachment-0001.gz>
More information about the dri-devel
mailing list