Changeset a35b458 in mainline for kernel/generic/src/log/log.c
- Timestamp:
- 2018-03-02T20:10:49Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/log/log.c
r3061bc1 ra35b458 121 121 len = LOG_LENGTH - log_current_len; 122 122 } 123 123 124 124 if (len == 0) 125 125 return; 126 126 127 127 size_t log_free = LOG_LENGTH - log_used - log_current_len; 128 128 129 129 /* Discard older entries to make space, if necessary */ 130 130 while (len > log_free) { … … 136 136 next_for_uspace -= entry_len; 137 137 } 138 138 139 139 size_t pos = (log_current_start + log_current_len) % LOG_LENGTH; 140 140 log_copy_to(data, pos, len); … … 151 151 spinlock_lock(&log_lock); 152 152 spinlock_lock(&kio_lock); 153 153 154 154 log_current_start = (log_start + log_used) % LOG_LENGTH; 155 155 log_current_len = 0; 156 156 157 157 /* Write header of the log entry, the length will be written in log_end() */ 158 158 log_append((uint8_t *) &log_current_len, sizeof(size_t)); … … 162 162 log_append((uint8_t *) &fac32, sizeof(uint32_t)); 163 163 log_append((uint8_t *) &lvl32, sizeof(uint32_t)); 164 164 165 165 log_counter++; 166 166 } … … 174 174 log_copy_to((uint8_t *) &log_current_len, log_current_start, sizeof(size_t)); 175 175 log_used += log_current_len; 176 176 177 177 kio_push_char('\n'); 178 178 spinlock_unlock(&kio_lock); 179 179 spinlock_unlock(&log_lock); 180 180 181 181 /* This has to be called after we released the locks above */ 182 182 kio_flush(); … … 189 189 if (!atomic_get(&log_inited)) 190 190 return; 191 191 192 192 spinlock_lock(&log_lock); 193 193 if (next_for_uspace < log_used) … … 200 200 size_t offset = 0; 201 201 size_t chars = 0; 202 202 203 203 while (offset < size) { 204 204 kio_push_char(str_decode(str, &offset, size)); 205 205 chars++; 206 206 } 207 207 208 208 log_append((const uint8_t *)str, size); 209 209 210 210 return chars; 211 211 } … … 216 216 size_t offset = 0; 217 217 size_t chars = 0; 218 218 219 219 for (offset = 0; offset < size; offset += sizeof(wchar_t), chars++) { 220 220 kio_push_char(wstr[chars]); 221 221 222 222 size_t buffer_offset = 0; 223 223 errno_t rc = chr_encode(wstr[chars], buffer, &buffer_offset, 16); … … 225 225 return EOF; 226 226 } 227 227 228 228 log_append((const uint8_t *)buffer, buffer_offset); 229 229 } 230 230 231 231 return chars; 232 232 } … … 239 239 { 240 240 int ret; 241 241 242 242 printf_spec_t ps = { 243 243 log_printf_str_write, … … 245 245 NULL 246 246 }; 247 248 247 248 249 249 ret = printf_core(fmt, &ps, args); 250 250 251 251 return ret; 252 252 } … … 260 260 int ret; 261 261 va_list args; 262 262 263 263 va_start(args, fmt); 264 264 ret = log_vprintf(fmt, args); 265 265 va_end(args); 266 266 267 267 return ret; 268 268 } … … 278 278 int ret; 279 279 va_list args; 280 280 281 281 log_begin(fac, level); 282 282 283 283 va_start(args, fmt); 284 284 ret = log_vprintf(fmt, args); 285 285 va_end(args); 286 286 287 287 log_end(); 288 288 289 289 return ret; 290 290 } … … 298 298 char *data; 299 299 errno_t rc; 300 300 301 301 if (size > PAGE_SIZE) 302 302 return (sys_errno_t) ELIMIT; 303 303 304 304 switch (operation) { 305 305 case KLOG_WRITE: … … 307 307 if (!data) 308 308 return (sys_errno_t) ENOMEM; 309 309 310 310 rc = copy_from_uspace(data, buf, size); 311 311 if (rc) { … … 314 314 } 315 315 data[size] = 0; 316 316 317 317 if (level >= LVL_LIMIT) 318 318 level = LVL_NOTE; 319 319 320 320 log(LF_USPACE, level, "%s", data); 321 321 322 322 free(data); 323 323 return EOK; … … 326 326 if (!data) 327 327 return (sys_errno_t) ENOMEM; 328 328 329 329 size_t entry_len = 0; 330 330 size_t copied = 0; 331 331 332 332 rc = EOK; 333 333 334 334 spinlock_lock(&log_lock); 335 335 336 336 while (next_for_uspace < log_used) { 337 337 size_t pos = (log_start + next_for_uspace) % LOG_LENGTH; 338 338 log_copy_from((uint8_t *) &entry_len, pos, sizeof(size_t)); 339 339 340 340 if (entry_len > PAGE_SIZE) { 341 341 /* … … 350 350 continue; 351 351 } 352 352 353 353 if (size < copied + entry_len) { 354 354 if (copied == 0) … … 356 356 break; 357 357 } 358 358 359 359 log_copy_from((uint8_t *) (data + copied), pos, entry_len); 360 360 copied += entry_len; 361 361 next_for_uspace += entry_len; 362 362 } 363 363 364 364 spinlock_unlock(&log_lock); 365 365 366 366 if (rc != EOK) { 367 367 free(data); 368 368 return (sys_errno_t) rc; 369 369 } 370 370 371 371 rc = copy_to_uspace(buf, data, size); 372 372 373 373 free(data); 374 374 375 375 if (rc != EOK) 376 376 return (sys_errno_t) rc; 377 377 378 378 return copy_to_uspace(uspace_nread, &copied, sizeof(copied)); 379 379 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.