}
EXPORT_SYMBOL_GPL(poll_state_synchronize_rcu);
- #ifdef CONFIG_KASAN_GENERIC
- void kvfree_call_rcu(struct rcu_head *head, void *ptr)
- {
- if (head)
- kasan_record_aux_stack(ptr);
-
- __kvfree_call_rcu(head, ptr);
- }
- EXPORT_SYMBOL_GPL(kvfree_call_rcu);
- #endif
-
+#if IS_ENABLED(CONFIG_RCU_TORTURE_TEST)
+unsigned long long rcutorture_gather_gp_seqs(void)
+{
+ return READ_ONCE(rcu_ctrlblk.gp_seq) & 0xffffULL;
+}
+EXPORT_SYMBOL_GPL(rcutorture_gather_gp_seqs);
+
+void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp, size_t len)
+{
+ snprintf(cp, len, "g%04llx", seqs & 0xffffULL);
+}
+EXPORT_SYMBOL_GPL(rcutorture_format_gp_seqs);
+#endif
+
void __init rcu_init(void)
{
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);