Some of the complexity in refine_card / oops_on_card_seq_iterate_careful arises from the possibility of "stale" marked cards, especially during concurrent refinement. These are cards in regions that have been freed and then possibly reallocated. At present the only source of stale cards in the concurrent case seems to be HCC eviction. (Eager reclaim of humongous objects flushes relevant remembered sets (possibly containing stale entries) for reconsideration during that GC, but in-GC card clipping to scan_top deals with that.) Doing HCC cleanup when freeing regions might remove the need for klass_or_null checking in the humongous case for concurrent refinement.