badrange
void badrange_forget(struct badrange *badrange, phys_addr_t start,
struct list_head *badrange_list = &badrange->list;
spin_lock(&badrange->lock);
alloc_and_append_badrange_entry(badrange, new_start,
spin_unlock(&badrange->lock);
void badrange_init(struct badrange *badrange)
INIT_LIST_HEAD(&badrange->list);
static void badblocks_populate(struct badrange *badrange,
if (list_empty(&badrange->list))
spin_lock_init(&badrange->lock);
list_for_each_entry(bre, &badrange->list, list) {
static void append_badrange_entry(struct badrange *badrange,
badblocks_populate(&nvdimm_bus->badrange, bb, range);
lockdep_assert_held(&badrange->lock);
list_add_tail(&bre->list, &badrange->list);
static int alloc_and_append_badrange_entry(struct badrange *badrange,
append_badrange_entry(badrange, bre, addr, length);
static int add_badrange(struct badrange *badrange, u64 addr, u64 length)
spin_unlock(&badrange->lock);
spin_lock(&badrange->lock);
if (list_empty(&badrange->list)) {
append_badrange_entry(badrange, bre_new, addr, length);
list_for_each_entry(bre, &badrange->list, list)
append_badrange_entry(badrange, bre_new, addr, length);
int badrange_add(struct badrange *badrange, u64 addr, u64 length)
spin_lock(&badrange->lock);
rc = add_badrange(badrange, addr, length);
spin_unlock(&badrange->lock);
badrange_forget(&nvdimm_bus->badrange, phys, cleared);
badrange_init(&nvdimm_bus->badrange);
spin_lock(&nvdimm_bus->badrange.lock);
free_badrange_list(&nvdimm_bus->badrange.list);
spin_unlock(&nvdimm_bus->badrange.lock);
return badrange_add(&nvdimm_bus->badrange, addr, length);
struct badrange badrange;
void badrange_init(struct badrange *badrange);
int badrange_add(struct badrange *badrange, u64 addr, u64 length);
void badrange_forget(struct badrange *badrange, phys_addr_t start,
struct badrange badrange;
post_ars_status(&t->ars_state, &t->badrange, t->spa_set_dma[0],
post_ars_status(&t->ars_state, &t->badrange, t->spa_set_dma[0],
badrange_init(&nfit_test->badrange);
struct badrange *badrange, u64 addr, u64 len)
spin_lock(&badrange->lock);
list_for_each_entry(be, &badrange->list, list) {
spin_unlock(&badrange->lock);
post_ars_status(ars_state, &t->badrange, ars_start->address,
badrange_forget(&t->badrange, clear_err->address, clear_err->length);
rc = badrange_add(&t->badrange, err_inj->err_inj_spa_range_base,
badrange_forget(&t->badrange, err_clr->err_inj_clr_spa_range_base,
spin_lock(&t->badrange.lock);
list_for_each_entry(be, &t->badrange.list, list) {
spin_unlock(&t->badrange.lock);