@@ -508,7 +508,7 @@ virCHProcessSetupVcpus(virDomainObjPtr vm)
508508 return 0 ;
509509}
510510
511- static int virCHProcessSetupThreads (virDomainObjPtr vm )
511+ int virCHProcessSetupThreads (virDomainObjPtr vm )
512512{
513513 virCHDomainObjPrivatePtr priv = vm -> privateData ;
514514 int ret ;
@@ -533,87 +533,6 @@ static int virCHProcessSetupThreads(virDomainObjPtr vm)
533533 return ret ;
534534}
535535
536- /*
537- * Procfs Thread watcher
538- * This thread is started when a Domain boots up and
539- * exists as long as the domain is active. The duty
540- * of the thread is to watch for any tid changes for
541- * the VM and then update the cgroups accordingly.
542- * Threads can change in the case of following events:
543- * - VM reboot
544- * - Device activation
545- *
546- * TODO: Parsing procfs frequently is ugly and not scalable
547- * Better option would be to have cloud-hypervisor
548- * return the thread information via API query or
549- * probably to have a monitor interface like what
550- * qemu has.
551- */
552-
553- /*
554- * Hard coding the polling interval for the watcher thread
555- * to be 1 second.
556- */
557- #define THREAD_WATCHER_POLL_INTERVAL G_USEC_PER_SEC
558-
559- static void chProcessWatchThreads (void * data )
560- {
561- virDomainObjPtr vm = (virDomainObjPtr )data ;
562- virCHDomainObjPrivatePtr priv ;
563-
564- VIR_DEBUG ("VM Thread watcher starting" );
565-
566- virObjectLock (vm );
567- priv = vm -> privateData ;
568- while (g_atomic_int_get (& priv -> vmThreadWatcherStop ) == 0 &&
569- virDomainObjIsActive (vm )) {
570-
571- if (virCHDomainObjBeginJob (vm , CH_JOB_MODIFY ) < 0 ) {
572- VIR_WARN ("VRP: Failed to Lock vm state" );
573- } else {
574- virCHProcessSetupThreads (vm );
575- virCHDomainObjEndJob (vm );
576- }
577-
578- virObjectUnlock (vm );
579- g_usleep (G_USEC_PER_SEC );
580- virObjectLock (vm );
581- }
582- VIR_DEBUG ("VM Thread watcher exiting" );
583-
584- virDomainObjEndAPI (& vm );
585- return ;
586- }
587-
588- static int virCHProcessStartWatchThreads (virDomainObjPtr vm )
589- {
590- virCHDomainObjPrivatePtr priv = vm -> privateData ;
591- g_autofree char * name = NULL ;
592-
593- name = g_strdup_printf ("threadwatcher-%d" , vm -> pid );
594-
595- virObjectRef (vm );
596- if (virThreadCreateFull (& priv -> vmThreadWatcher ,
597- false,
598- chProcessWatchThreads ,
599- name ,
600- false,
601- vm ) < 0 ) {
602- virObjectUnref (vm );
603- return -1 ;
604-
605- }
606-
607- g_atomic_int_set (& priv -> vmThreadWatcherStop , 0 );
608- return 0 ;
609- }
610-
611- static void virCHProcessStopWatchThreads (virDomainObjPtr vm )
612- {
613- virCHDomainObjPrivatePtr priv = vm -> privateData ;
614- g_atomic_int_set (& priv -> vmThreadWatcherStop , 1 );
615- }
616-
617536/**
618537 * chProcessNetworkPrepareDevices
619538 */
@@ -776,10 +695,6 @@ int virCHProcessStart(virCHDriverPtr driver,
776695 if (chSetupGlobalCpuCgroup (vm ) < 0 )
777696 goto cleanup ;
778697
779- VIR_DEBUG ("Starting the thread watcher thread" );
780- if (virCHProcessStartWatchThreads (vm ) < 0 )
781- goto cleanup ;
782-
783698 virDomainObjSetState (vm , VIR_DOMAIN_RUNNING , reason );
784699
785700 if (virDomainObjSave (vm , driver -> xmlopt , cfg -> stateDir ) < 0 )
@@ -1036,8 +951,6 @@ int virCHProcessStop(virCHDriverPtr driver,
1036951 VIR_DEBUG ("Stopping VM name=%s pid=%d reason=%d" ,
1037952 vm -> def -> name , (int )vm -> pid , (int )reason );
1038953
1039- virCHProcessStopWatchThreads (vm );
1040-
1041954 if (priv -> monitor ) {
1042955 virCHMonitorClose (priv -> monitor );
1043956 priv -> monitor = NULL ;
0 commit comments