Exemplo n.º 1
0
void
CommOS_StopIO(void)
{
	int cpu;

	if (running) {
		running = 0;
		if (aioWQ) {
			FlushWorkqueue(aioWQ);
			DestroyWorkqueue(aioWQ);
			aioWQ = NULL;
		}
		FlushWorkqueue(dispatchWQ);
#ifdef CONFIG_HOTPLUG_CPU
		unregister_hotcpu_notifier(&CpuNotifier);
#endif
		for_each_possible_cpu(cpu) {
			WaitForDelayedWork(&dispatchWorksNow[cpu]);
			WaitForDelayedWork(&dispatchWorks[cpu]);
		}
		DestroyWorkqueue(dispatchWQ);
		dispatchWQ = NULL;
		commos_info("%s: I/O tasks stopped.\n", __func__);
	}
}
Exemplo n.º 2
0
static int __cpuinit
CpuCallback(struct notifier_block *nfb,
	    unsigned long action,
	    void *hcpu)
{
	unsigned int cpu = (unsigned long)hcpu;

	switch (action) {
	case CPU_ONLINE:
	case CPU_ONLINE_FROZEN:
		if (running)
			QueueDelayedWorkOn(cpu, dispatchWQ,
					   &dispatchWorks[cpu],
					   dispatchInterval);

		break;
	case CPU_DOWN_PREPARE:
	case CPU_DOWN_PREPARE_FROZEN:
		WaitForDelayedWork(&dispatchWorksNow[cpu]);
		WaitForDelayedWork(&dispatchWorks[cpu]);
		break;
	case CPU_DOWN_FAILED:
	case CPU_DOWN_FAILED_FROZEN:
		if (running)
			QueueDelayedWorkOn(cpu, dispatchWQ,
					   &dispatchWorks[cpu],
					   dispatchInterval);

		break;
	}

	return NOTIFY_OK;
}
void
CommOS_StopIO(void)
{
   int cpu;

   if (running) {
      running = 0;
      if (aioWQ) {
         FlushWorkqueue(aioWQ);
         DestroyWorkqueue(aioWQ);
         aioWQ = NULL;
      }
      FlushWorkqueue(dispatchWQ);
      for (cpu = 0; cpu < numCpus; cpu++) {
         WaitForDelayedWork(&dispatchWorksNow[cpu]);
         WaitForDelayedWork(&dispatchWorks[cpu]);
      }
      DestroyWorkqueue(dispatchWQ);
      dispatchWQ = NULL;
      CommOS_Log(("%s: I/O tasks stopped.\n", __FUNCTION__));
   }
}