Hi Haren, kernel test robot noticed the following build warnings:
[auto build test WARNING on powerpc/next] [also build test WARNING on powerpc/fixes linus/master v6.13-rc5 next-20241220] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Haren-Myneni/powerpc-pseries-Define-common-functions-for-RTAS-sequence-HCALLs/20250105-045010 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next patch link: https://lore.kernel.org/r/20250104204652.388720-4-haren%40linux.ibm.com patch subject: [PATCH 3/6] powerpc/pseries: Add papr-indices char driver for ibm,get-indices HCALL config: powerpc64-randconfig-002-20250105 (https://download.01.org/0day-ci/archive/20250105/202501051117.d90y1vns-...@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 096551537b2a747a3387726ca618ceeb3950e9bc) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250105/202501051117.d90y1vns-...@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <l...@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202501051117.d90y1vns-...@intel.com/ All warnings (new ones prefixed by >>): >> arch/powerpc/platforms/pseries/papr-indices.c:45: warning: expecting >> prototype for struct rtas_ibm_get_indices_params. Prototype was for struct >> rtas_get_indices_params instead >> arch/powerpc/platforms/pseries/papr-indices.c:210: warning: This comment >> starts with '/**', but isn't a kernel-doc comment. Refer >> Documentation/doc-guide/kernel-doc.rst * Work function to be passed to papr_rtas_blob_generate(). >> arch/powerpc/platforms/pseries/papr-indices.c:247: warning: Function >> parameter or struct member 'file' not described in 'papr_indices_handle_read' >> arch/powerpc/platforms/pseries/papr-indices.c:247: warning: Function >> parameter or struct member 'buf' not described in 'papr_indices_handle_read' >> arch/powerpc/platforms/pseries/papr-indices.c:247: warning: Function >> parameter or struct member 'size' not described in 'papr_indices_handle_read' >> arch/powerpc/platforms/pseries/papr-indices.c:247: warning: Function >> parameter or struct member 'off' not described in 'papr_indices_handle_read' vim +45 arch/powerpc/platforms/pseries/papr-indices.c 29 30 /** 31 * struct rtas_ibm_get_indices_params - Parameters (in and out) for 32 * ibm,get-indices. 33 * @is_sensor: In: Caller-provided whether sensor or indicator. 34 * @indice_type:In: Caller-provided indice (sensor or indicator) token 35 * @work_area: In: Caller-provided work area buffer for results. 36 * @next: In: Sequence number. Out: Next sequence number. 37 * @status: Out: RTAS call status. 38 */ 39 struct rtas_get_indices_params { 40 u8 is_sensor; 41 u32 indice_type; 42 struct rtas_work_area *work_area; 43 u32 next; 44 s32 status; > 45 }; 46 47 /** 48 * rtas_ibm_get_indices() - Call ibm,get-indices to fill a work area buffer. 49 * @params: See &struct rtas_ibm_get_indices_params. 50 * 51 * Calls ibm,get-indices until it errors or successfully deposits data 52 * into the supplied work area. Handles RTAS retry statuses. Maps RTAS 53 * error statuses to reasonable errno values. 54 * 55 * The caller is expected to invoke rtas_ibm_get_indices() multiple times 56 * to retrieve all indices data for the provided indice type. Only one 57 * sequence should be in progress at any time; starting a new sequence 58 * will disrupt any sequence already in progress. Serialization of 59 * indices retrieval sequences is the responsibility of the caller. 60 * 61 * The caller should inspect @params.status to determine whether more 62 * calls are needed to complete the sequence. 63 * 64 * Context: May sleep. 65 * Return: -ve on error, 0 otherwise. 66 */ 67 static int rtas_ibm_get_indices(struct rtas_get_indices_params *params) 68 { 69 struct rtas_work_area *work_area = params->work_area; 70 const s32 token = rtas_function_token(RTAS_FN_IBM_GET_INDICES); 71 u32 rets; 72 s32 fwrc; 73 int ret; 74 75 if (token == RTAS_UNKNOWN_SERVICE) 76 return -ENOENT; 77 78 lockdep_assert_held(&rtas_ibm_get_indices_lock); 79 80 do { 81 fwrc = rtas_call(token, 5, 2, &rets, params->is_sensor, 82 params->indice_type, 83 rtas_work_area_phys(work_area), 84 rtas_work_area_size(work_area), 85 params->next); 86 } while (rtas_busy_delay(fwrc)); 87 88 switch (fwrc) { 89 case RTAS_HARDWARE_ERROR: 90 ret = -EIO; 91 break; 92 case RTAS_INVALID_PARAMETER: /* Indicator type is not supported */ 93 ret = -EINVAL; 94 break; 95 case RTAS_IBM_GET_INDICES_START_OVER: 96 ret = -EAGAIN; 97 pr_info_ratelimited("Indices changed during retrieval, retrying\n"); 98 params->next = 1; 99 break; 100 case RTAS_IBM_GET_INDICES_MORE_DATA: 101 params->next = rets; 102 fallthrough; 103 case RTAS_IBM_GET_INDICES_COMPLETE: 104 params->next = 0; 105 ret = 0; 106 break; 107 default: 108 ret = -EIO; 109 pr_err_ratelimited("unexpected ibm,get-indices status %d\n", fwrc); 110 break; 111 } 112 113 params->status = fwrc; 114 return ret; 115 } 116 117 /* 118 * Internal indices sequence APIs. A sequence is a series of calls to 119 * ibm,get-indices for a given location code. The sequence ends when 120 * an error is encountered or all indices for the input has been 121 * returned. 122 */ 123 124 /** 125 * indices_sequence_begin() - Begin a indices retrieval sequence. 126 * @seq: Uninitialized sequence state. 127 * @params: Indices call parameters and initialization 128 * 129 * Initializes @seq with the resources necessary to carry out indices 130 * call sequence. Callers must pass @seq to indices_sequence_end() 131 * regardless of whether the sequence succeeds. 132 * 133 * Context: May sleep. 134 */ 135 static void indices_sequence_begin(struct papr_rtas_sequence *seq, 136 void *params) 137 { 138 struct rtas_get_indices_params *param; 139 140 param = (struct rtas_get_indices_params *)params; 141 /* 142 * We could allocate the work area before acquiring the 143 * function lock, but that would allow concurrent requests to 144 * exhaust the limited work area pool for no benefit. So 145 * allocate the work area under the lock. 146 */ 147 mutex_lock(&rtas_ibm_get_indices_lock); 148 param->work_area = rtas_work_area_alloc(RTAS_GET_INDICES_BUF_SIZE); 149 param->next = 1; 150 param->status = 0; 151 seq->params = param; 152 } 153 154 /** 155 * indices_sequence_end() - Finalize a indices retrieval sequence. 156 * @seq: indices call parameters from sequence struct 157 * 158 * Releases resources obtained by indices_sequence_begin(). 159 */ 160 static void indices_sequence_end(struct papr_rtas_sequence *seq) 161 { 162 struct rtas_get_indices_params *param; 163 164 param = (struct rtas_get_indices_params *)seq->params; 165 rtas_work_area_free(param->work_area); 166 mutex_unlock(&rtas_ibm_get_indices_lock); 167 } 168 169 /** 170 * indices_sequence_should_stop() - Determine whether a indices 171 * retrieval sequence should continue. 172 * @seq: indices sequence state. 173 * 174 * Examines the sequence error state and outputs of the last call to 175 * ibm,get-indices to determine whether the sequence in progress should 176 * continue or stop. 177 * 178 * Return: True if the sequence has encountered an error or if all 179 * indices for this sequence has been retrieved. False otherwise. 180 */ 181 static bool indices_sequence_should_stop(const struct papr_rtas_sequence *seq) 182 { 183 struct rtas_get_indices_params *param; 184 bool done; 185 186 if (seq->error) 187 return true; 188 189 param = (struct rtas_get_indices_params *)seq->params; 190 191 switch (param->status) { 192 case RTAS_IBM_GET_INDICES_COMPLETE: 193 if (param->next == 1) 194 done = false; /* Initial state. */ 195 else 196 done = true; /* All data consumed. */ 197 break; 198 case RTAS_IBM_GET_INDICES_MORE_DATA: 199 done = false; /* More data available. */ 200 break; 201 default: 202 done = true; /* Error encountered. */ 203 break; 204 } 205 206 return done; 207 } 208 209 /** > 210 * Work function to be passed to papr_rtas_blob_generate(). 211 * 212 * ibm,get-indices RTAS call fills the work area with the certain 213 * format but does not return the bytes written in the buffer. So 214 * instead of kernel parsing this work area to determine the buffer 215 * length, copy the complete work area (RTAS_GET_INDICES_BUF_SIZE) 216 * to the blob and let the user space to obtain the data. 217 * Means RTAS_GET_INDICES_BUF_SIZE data will be returned for each 218 * read(). 219 */ 220 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki