PUBLIC
Jdb_module::Action_code
Jdb_rcupdate::action(int cmd, void *&, char const *&, int &)
{
  printf("\nRCU--------------------------\n");

  if (cmd == 0)
    {
      printf("RCU:\n  current batch=");
      print_batch(Rcu::_rcu._current); puts("");
      printf("  completed=");
      print_batch(Rcu::_rcu._completed); puts("");
      printf("  next_pending=%s\n"
             "  cpus=", Rcu::_rcu._next_pending?"yes":"no");
      Jdb::cpu_mask_print(Rcu::_rcu._cpus);
      puts("");
      printf("  active cpus=");
      Jdb::cpu_mask_print(Rcu::_rcu._active_cpus);
      puts("");
      printf("  active cpus=");
      Jdb::cpu_mask_print(Rcu::_rcu._active_cpus);
      puts("");

      for (Cpu_number i = Cpu_number::first(); i < Config::max_num_cpus(); ++i)
	{
	  if (!Cpu::online(i))
	    continue;

	  printf("  CPU[%2u]:", cxx::int_value<Cpu_number>(i));
	  Rcu_data const *d = &Rcu::_rcu_data.cpu(i);
	  printf("    quiescent batch=");
	  print_batch(d->_q_batch); puts("");
	  printf("    quiescent state passed: %s\n", d->_q_passed?"yes":"no");
	  printf("    wait for quiescent state: %s\n", d->_pending?"yes":"no");
	  printf("    batch=");
	  print_batch(d->_batch); puts("");
	  printf("    next list:    h=%p len=%ld\n", d->_n.front(), d->_len);
	  printf("    current list: h=%p \n", d->_c.front());
	  printf("    done list:    h=%p\n", d->_d.front());
	}
    }
  return NOTHING;
}
PUBLIC
Jdb_module::Action_code
Jdb_rcupdate::action(int cmd, void *&, char const *&, int &)
{ printf("\nRCU--------------------------\n");
  if (cmd == 0)
    {
      printf("RCU:\n  current batch=");
      print_batch(Rcu::_rcu._current); puts("");
      printf("  completed=");
      print_batch(Rcu::_rcu._completed); puts("");
      printf("  next_pending=%s\n"
             "  cpus=", Rcu::_rcu._next_pending?"yes":"no");
      for (unsigned i = 0; i < Config::Max_num_cpus; ++i)
	printf("%s%s", Rcu::_rcu._cpus.get(i)?"1":"0", i%4 == 3?" ":"");

      puts("");

      for (unsigned i = 0; i < Config::Max_num_cpus; ++i)
	{
	  if (!Cpu::online(i))
	    continue;

	  printf("  CPU[%2u]:", i);
	  Rcu_data const *d = &Rcu::_rcu_data.cpu(i);
	  printf("    quiescent batch=");
	  print_batch(d->_q_batch); puts("");
	  printf("    quiescent state passed: %s\n", d->_q_passed?"yes":"no");
	  printf("    wait for quiescent state: %s\n", d->_pending?"yes":"no");
	  printf("    batch=");
	  print_batch(d->_batch); puts("");
	  printf("    next list:    h=%p len=%ld\n", d->_n.front(), d->_len);
	  printf("    current list: h=%p \n", d->_c.front());
	  printf("    done list:    h=%p\n", d->_d.front());
	}

      return NOTHING;
    }
  return NOTHING;
}