Lines Matching refs:cxt

317 	struct psz_context *cxt = &pstore_zone_cxt;  in psz_flush_all_dirty_zones()  local
320 if (cxt->ppsz) in psz_flush_all_dirty_zones()
321 ret |= psz_flush_dirty_zone(cxt->ppsz); in psz_flush_all_dirty_zones()
322 if (cxt->cpsz) in psz_flush_all_dirty_zones()
323 ret |= psz_flush_dirty_zone(cxt->cpsz); in psz_flush_all_dirty_zones()
324 if (cxt->kpszs) in psz_flush_all_dirty_zones()
325 ret |= psz_flush_dirty_zones(cxt->kpszs, cxt->kmsg_max_cnt); in psz_flush_all_dirty_zones()
326 if (cxt->fpszs) in psz_flush_all_dirty_zones()
327 ret |= psz_flush_dirty_zones(cxt->fpszs, cxt->ftrace_max_cnt); in psz_flush_all_dirty_zones()
328 if (ret && cxt->pstore_zone_info) in psz_flush_all_dirty_zones()
332 static int psz_kmsg_recover_data(struct psz_context *cxt) in psz_kmsg_recover_data() argument
334 struct pstore_zone_info *info = cxt->pstore_zone_info; in psz_kmsg_recover_data()
343 for (i = 0; i < cxt->kmsg_max_cnt; i++) { in psz_kmsg_recover_data()
344 zone = cxt->kpszs[i]; in psz_kmsg_recover_data()
348 unsigned int wcnt = cxt->kmsg_write_cnt; in psz_kmsg_recover_data()
349 struct pstore_zone *new = cxt->kpszs[wcnt]; in psz_kmsg_recover_data()
358 cxt->kmsg_write_cnt = (wcnt + 1) % cxt->kmsg_max_cnt; in psz_kmsg_recover_data()
371 static int psz_kmsg_recover_meta(struct psz_context *cxt) in psz_kmsg_recover_meta() argument
373 struct pstore_zone_info *info = cxt->pstore_zone_info; in psz_kmsg_recover_meta()
391 for (i = 0; i < cxt->kmsg_max_cnt; i++) { in psz_kmsg_recover_meta()
392 zone = cxt->kpszs[i]; in psz_kmsg_recover_meta()
432 cxt->kmsg_write_cnt = (i + 1) % cxt->kmsg_max_cnt; in psz_kmsg_recover_meta()
436 cxt->oops_counter = in psz_kmsg_recover_meta()
437 max(cxt->oops_counter, hdr->counter); in psz_kmsg_recover_meta()
439 cxt->panic_counter = in psz_kmsg_recover_meta()
440 max(cxt->panic_counter, hdr->counter); in psz_kmsg_recover_meta()
460 static int psz_kmsg_recover(struct psz_context *cxt) in psz_kmsg_recover() argument
464 if (!cxt->kpszs) in psz_kmsg_recover()
467 ret = psz_kmsg_recover_meta(cxt); in psz_kmsg_recover()
471 ret = psz_kmsg_recover_data(cxt); in psz_kmsg_recover()
481 static int psz_recover_zone(struct psz_context *cxt, struct pstore_zone *zone) in psz_recover_zone() argument
483 struct pstore_zone_info *info = cxt->pstore_zone_info; in psz_recover_zone()
568 static int psz_recover_zones(struct psz_context *cxt, in psz_recover_zones() argument
582 ret = psz_recover_zone(cxt, zone); in psz_recover_zones()
601 static inline int psz_recovery(struct psz_context *cxt) in psz_recovery() argument
605 if (atomic_read(&cxt->recovered)) in psz_recovery()
608 ret = psz_kmsg_recover(cxt); in psz_recovery()
612 ret = psz_recover_zone(cxt, cxt->ppsz); in psz_recovery()
616 ret = psz_recover_zone(cxt, cxt->cpsz); in psz_recovery()
620 ret = psz_recover_zones(cxt, cxt->fpszs, cxt->ftrace_max_cnt); in psz_recovery()
627 atomic_set(&cxt->recovered, 1); in psz_recovery()
634 struct psz_context *cxt = psi->data; in psz_pstore_open() local
636 cxt->kmsg_read_cnt = 0; in psz_pstore_open()
637 cxt->pmsg_read_cnt = 0; in psz_pstore_open()
638 cxt->console_read_cnt = 0; in psz_pstore_open()
639 cxt->ftrace_read_cnt = 0; in psz_pstore_open()
657 static inline int psz_kmsg_erase(struct psz_context *cxt, in psz_kmsg_erase() argument
674 if (cxt->pstore_zone_info->erase) in psz_kmsg_erase()
675 return cxt->pstore_zone_info->erase(size, zone->off); in psz_kmsg_erase()
680 static inline int psz_record_erase(struct psz_context *cxt, in psz_record_erase() argument
701 struct psz_context *cxt = record->psi->data; in psz_pstore_erase() local
705 if (record->id >= cxt->kmsg_max_cnt) in psz_pstore_erase()
707 return psz_kmsg_erase(cxt, cxt->kpszs[record->id], record); in psz_pstore_erase()
709 return psz_record_erase(cxt, cxt->ppsz); in psz_pstore_erase()
711 return psz_record_erase(cxt, cxt->cpsz); in psz_pstore_erase()
713 if (record->id >= cxt->ftrace_max_cnt) in psz_pstore_erase()
715 return psz_record_erase(cxt, cxt->fpszs[record->id]); in psz_pstore_erase()
723 struct psz_context *cxt = record->psi->data; in psz_write_kmsg_hdr() local
734 hdr->counter = ++cxt->oops_counter; in psz_write_kmsg_hdr()
736 hdr->counter = ++cxt->panic_counter; in psz_write_kmsg_hdr()
745 static inline int notrace psz_kmsg_write_record(struct psz_context *cxt, in psz_kmsg_write_record() argument
752 for (i = 0; i < cxt->kmsg_max_cnt; i++) { in psz_kmsg_write_record()
756 zonenum = (cxt->kmsg_write_cnt + i) % cxt->kmsg_max_cnt; in psz_kmsg_write_record()
757 zone = cxt->kpszs[zonenum]; in psz_kmsg_write_record()
777 cxt->kmsg_write_cnt = zonenum + 1; in psz_kmsg_write_record()
778 cxt->kmsg_write_cnt %= cxt->kmsg_max_cnt; in psz_kmsg_write_record()
795 static int notrace psz_kmsg_write(struct psz_context *cxt, in psz_kmsg_write() argument
809 if (!cxt->kpszs) in psz_kmsg_write()
812 ret = psz_kmsg_write_record(cxt, record); in psz_kmsg_write()
874 struct psz_context *cxt = record->psi->data; in psz_pstore_write() local
878 atomic_set(&cxt->on_panic, 1); in psz_pstore_write()
889 return psz_kmsg_write(cxt, record); in psz_pstore_write()
891 return psz_record_write(cxt->cpsz, record); in psz_pstore_write()
893 return psz_record_write(cxt->ppsz, record); in psz_pstore_write()
897 if (!cxt->fpszs) in psz_pstore_write()
899 return psz_record_write(cxt->fpszs[zonenum], record); in psz_pstore_write()
906 static struct pstore_zone *psz_read_next_zone(struct psz_context *cxt) in psz_read_next_zone() argument
910 while (cxt->kmsg_read_cnt < cxt->kmsg_max_cnt) { in psz_read_next_zone()
911 zone = cxt->kpszs[cxt->kmsg_read_cnt++]; in psz_read_next_zone()
916 if (cxt->ftrace_read_cnt < cxt->ftrace_max_cnt) in psz_read_next_zone()
922 return cxt->fpszs[cxt->ftrace_read_cnt++]; in psz_read_next_zone()
924 if (cxt->pmsg_read_cnt == 0) { in psz_read_next_zone()
925 cxt->pmsg_read_cnt++; in psz_read_next_zone()
926 zone = cxt->ppsz; in psz_read_next_zone()
931 if (cxt->console_read_cnt == 0) { in psz_read_next_zone()
932 cxt->console_read_cnt++; in psz_read_next_zone()
933 zone = cxt->cpsz; in psz_read_next_zone()
1002 struct psz_context *cxt; in psz_ftrace_read() local
1022 cxt = record->psi->data; in psz_ftrace_read()
1023 if (cxt->ftrace_read_cnt < cxt->ftrace_max_cnt) in psz_ftrace_read()
1058 struct psz_context *cxt = record->psi->data; in psz_pstore_read() local
1065 ret = psz_recovery(cxt); in psz_pstore_read()
1070 zone = psz_read_next_zone(cxt); in psz_pstore_read()
1078 record->id = cxt->kmsg_read_cnt - 1; in psz_pstore_read()
1138 static void psz_free_all_zones(struct psz_context *cxt) in psz_free_all_zones() argument
1140 if (cxt->kpszs) in psz_free_all_zones()
1141 psz_free_zones(&cxt->kpszs, &cxt->kmsg_max_cnt); in psz_free_all_zones()
1142 if (cxt->ppsz) in psz_free_all_zones()
1143 psz_free_zone(&cxt->ppsz); in psz_free_all_zones()
1144 if (cxt->cpsz) in psz_free_all_zones()
1145 psz_free_zone(&cxt->cpsz); in psz_free_all_zones()
1146 if (cxt->fpszs) in psz_free_all_zones()
1147 psz_free_zones(&cxt->fpszs, &cxt->ftrace_max_cnt); in psz_free_all_zones()
1234 static int psz_alloc_zones(struct psz_context *cxt) in psz_alloc_zones() argument
1236 struct pstore_zone_info *info = cxt->pstore_zone_info; in psz_alloc_zones()
1242 cxt->ppsz = psz_init_zone(PSTORE_TYPE_PMSG, &off, info->pmsg_size); in psz_alloc_zones()
1243 if (IS_ERR(cxt->ppsz)) { in psz_alloc_zones()
1244 err = PTR_ERR(cxt->ppsz); in psz_alloc_zones()
1245 cxt->ppsz = NULL; in psz_alloc_zones()
1250 cxt->cpsz = psz_init_zone(PSTORE_TYPE_CONSOLE, &off, in psz_alloc_zones()
1252 if (IS_ERR(cxt->cpsz)) { in psz_alloc_zones()
1253 err = PTR_ERR(cxt->cpsz); in psz_alloc_zones()
1254 cxt->cpsz = NULL; in psz_alloc_zones()
1259 cxt->fpszs = psz_init_zones(PSTORE_TYPE_FTRACE, &off, in psz_alloc_zones()
1262 &cxt->ftrace_max_cnt); in psz_alloc_zones()
1263 if (IS_ERR(cxt->fpszs)) { in psz_alloc_zones()
1264 err = PTR_ERR(cxt->fpszs); in psz_alloc_zones()
1265 cxt->fpszs = NULL; in psz_alloc_zones()
1269 cxt->kpszs = psz_init_zones(PSTORE_TYPE_DMESG, &off, in psz_alloc_zones()
1271 info->kmsg_size, &cxt->kmsg_max_cnt); in psz_alloc_zones()
1272 if (IS_ERR(cxt->kpszs)) { in psz_alloc_zones()
1273 err = PTR_ERR(cxt->kpszs); in psz_alloc_zones()
1274 cxt->kpszs = NULL; in psz_alloc_zones()
1280 psz_free_all_zones(cxt); in psz_alloc_zones()
1296 struct psz_context *cxt = &pstore_zone_cxt; in register_pstore_zone() local
1342 mutex_lock(&cxt->pstore_zone_info_lock); in register_pstore_zone()
1343 if (cxt->pstore_zone_info) { in register_pstore_zone()
1345 cxt->pstore_zone_info->name, info->name); in register_pstore_zone()
1346 mutex_unlock(&cxt->pstore_zone_info_lock); in register_pstore_zone()
1349 cxt->pstore_zone_info = info; in register_pstore_zone()
1358 err = psz_alloc_zones(cxt); in register_pstore_zone()
1365 cxt->pstore.bufsize = cxt->kpszs[0]->buffer_size - in register_pstore_zone()
1367 cxt->pstore.buf = kzalloc(cxt->pstore.bufsize, GFP_KERNEL); in register_pstore_zone()
1368 if (!cxt->pstore.buf) { in register_pstore_zone()
1373 cxt->pstore.data = cxt; in register_pstore_zone()
1376 cxt->pstore.max_reason = info->max_reason; in register_pstore_zone()
1377 cxt->pstore.name = info->name; in register_pstore_zone()
1379 cxt->pstore.flags |= PSTORE_FLAGS_DMESG; in register_pstore_zone()
1381 kmsg_dump_reason_str(cxt->pstore.max_reason)); in register_pstore_zone()
1382 if (cxt->pstore_zone_info->panic_write) in register_pstore_zone()
1387 cxt->pstore.flags |= PSTORE_FLAGS_PMSG; in register_pstore_zone()
1391 cxt->pstore.flags |= PSTORE_FLAGS_CONSOLE; in register_pstore_zone()
1395 cxt->pstore.flags |= PSTORE_FLAGS_FTRACE; in register_pstore_zone()
1400 err = pstore_register(&cxt->pstore); in register_pstore_zone()
1410 kfree(cxt->pstore.buf); in register_pstore_zone()
1411 cxt->pstore.buf = NULL; in register_pstore_zone()
1412 cxt->pstore.bufsize = 0; in register_pstore_zone()
1413 psz_free_all_zones(cxt); in register_pstore_zone()
1428 struct psz_context *cxt = &pstore_zone_cxt; in unregister_pstore_zone() local
1430 mutex_lock(&cxt->pstore_zone_info_lock); in unregister_pstore_zone()
1431 if (!cxt->pstore_zone_info) { in unregister_pstore_zone()
1432 mutex_unlock(&cxt->pstore_zone_info_lock); in unregister_pstore_zone()
1437 pstore_unregister(&cxt->pstore); in unregister_pstore_zone()
1444 kfree(cxt->pstore.buf); in unregister_pstore_zone()
1445 cxt->pstore.buf = NULL; in unregister_pstore_zone()
1446 cxt->pstore.bufsize = 0; in unregister_pstore_zone()
1447 cxt->pstore_zone_info = NULL; in unregister_pstore_zone()
1449 psz_free_all_zones(cxt); in unregister_pstore_zone()
1452 cxt->oops_counter = 0; in unregister_pstore_zone()
1453 cxt->panic_counter = 0; in unregister_pstore_zone()
1454 atomic_set(&cxt->recovered, 0); in unregister_pstore_zone()
1455 atomic_set(&cxt->on_panic, 0); in unregister_pstore_zone()
1457 mutex_unlock(&cxt->pstore_zone_info_lock); in unregister_pstore_zone()