From nobody Thu May 2 05:47:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 150886655928682.11681009321364; Tue, 24 Oct 2017 10:35:59 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5B2AD267F4; Tue, 24 Oct 2017 17:35:39 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D1C865DA6E; Tue, 24 Oct 2017 17:35:38 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 9B3F36EF2B; Tue, 24 Oct 2017 17:35:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OHZNUP024668 for ; Tue, 24 Oct 2017 13:35:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4B5637A213; Tue, 24 Oct 2017 17:35:23 +0000 (UTC) Received: from mx1.redhat.com (ext-mx07.extmail.prod.ext.phx2.redhat.com [10.5.110.31]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DCEB57A3A5; Tue, 24 Oct 2017 17:35:16 +0000 (UTC) Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9E4DDC01F27F; Tue, 24 Oct 2017 17:35:15 +0000 (UTC) Received: by mail-pf0-f195.google.com with SMTP id b85so20165150pfj.13; Tue, 24 Oct 2017 10:35:15 -0700 (PDT) Received: from ps-f25-dev.eng.nutanix.com ([205.209.132.2]) by smtp.gmail.com with ESMTPSA id k2sm1333236pff.126.2017.10.24.10.35.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Oct 2017 10:35:13 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5B2AD267F4 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5B2AD267F4 Authentication-Results: mx1.redhat.com; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lx/V9t+8" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9E4DDC01F27F Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=saxenap.ltc@gmail.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 9E4DDC01F27F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/bS+KNeoqFsl7/TplnjFKUa0D9DR5LycDj5scSGxzp4=; b=lx/V9t+8LOj1rpDgbbR4Ylqiqg20r/uzRX7S/aZ0ZWgL3IsiEThGZs8FLJqMhnrkZU gqdbaUMRw7egpRy5ZbbQEccsH2pShoo1qRRwS0hCy+WyeUAtJCtz6CTh9c6tpYi68kqR Q/yVdML5zcunUoZLZ8+URdARbi+UWNeaT7f8JC5qgk9xoMzNll300RyLD3Vm01U8i4No +SDzk6EQ+0CuGluJFPpXEEphvO5PSH25q4acPBpMtvBJvbr1LkCmHj5avLuemES6ofSO yrpxddvMf19ouVFkd5ZvucLbdlaagdgESld/CPxwCE4Ce8PeqkdPRzdz46UYS5GoDzfX sgEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/bS+KNeoqFsl7/TplnjFKUa0D9DR5LycDj5scSGxzp4=; b=Ox5KAI08fQxf1WavaohTSHP90omxf8UFU6c3xabYGpvbIV4ZenNWK+9um86q8tRoia RMEFwGAKTdhRQYsC8CZprlkuEXciL3PUH1aeNEFl+vPvQ+tzwIOcm9cJcLlyfJ/e+5CY gWaBbz5tcgA7k/AADzlNQ2RLy2O+ANIwK7ZkBmKLC/H65UQnHEh7yyKkqrKXdh66ZLi9 t77Rmwmp+ZOQlWm6ckk4OFKmynNAEqM5YMic7stgJtqouGlHKnb1vDQTzeVrB5lTMNUd hlnHTd7VMm6QQqqnEZJ+yXHbPq6WOuE/zHGsC/iSHwDkVUUPUNs1u7W56wFAI8YW3WAn GhjA== X-Gm-Message-State: AMCzsaUd+yoFhG0UCFB2rS4OuIlKUMfdCDHdt2PTSTDU5K0sbuUTmdio 2Hh7KyuMYAhaE1qLcYX4vFB4w+ZjWuw= X-Google-Smtp-Source: ABhQp+Scz4Q4XhPYTGahAnZyFljUpr1JQIYdZCGHwf4L0GDldQbnN/P5RKdxBwdyOaPg8+kyNqz6EA== X-Received: by 10.101.76.195 with SMTP id n3mr15978258pgt.120.1508866514495; Tue, 24 Oct 2017 10:35:14 -0700 (PDT) From: Prerna Saxena To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 10:35:00 -0700 Message-Id: <20171024173501.18105-8-saxenap.ltc@gmail.com> In-Reply-To: <20171024173501.18105-1-saxenap.ltc@gmail.com> References: <20171024173501.18105-1-saxenap.ltc@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 17:35:15 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 17:35:15 +0000 (UTC) for IP:'209.85.192.195' DOMAIN:'mail-pf0-f195.google.com' HELO:'mail-pf0-f195.google.com' FROM:'saxenap.ltc@gmail.com' RCPT:'' X-RedHat-Spam-Score: -2.41 (DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.192.195 mail-pf0-f195.google.com 209.85.192.195 mail-pf0-f195.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.31 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: --jdenemar@redhat.com, --pkrempa@redhat.com Subject: [libvirt] [[RFC] 7/8] Fold back the 2-stage event implementation for a few events : Watchdog, Monitor EOF, Serial changed, Guest panic, Nic RX filter changed .. into single level. X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 24 Oct 2017 17:35:39 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Also, the enqueuing of a new event now triggers virEventWorkerScanQueue() Signed-off-by: Prerna Saxena --- src/qemu/qemu_driver.c | 61 ++---------------------- src/qemu/qemu_process.c | 121 +++++++++++---------------------------------= ---- 2 files changed, 29 insertions(+), 153 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 9d495fb..881f253 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -138,8 +138,6 @@ VIR_LOG_INIT("qemu.qemu_driver"); =20 #define QEMU_NB_BANDWIDTH_PARAM 7 =20 -static void qemuProcessEventHandler(void *data, void *opaque); - static int qemuStateCleanup(void); =20 static int qemuDomainObjStart(virConnectPtr conn, @@ -936,7 +934,9 @@ qemuStateInitialize(bool privileged, =20 qemuProcessReconnectAll(conn, qemu_driver); =20 - qemu_driver->workerPool =3D virThreadPoolNew(0, 1, 0, qemuProcessEvent= Handler, qemu_driver); + qemu_driver->workerPool =3D virThreadPoolNew(0, 1, 0, virEventWorkerSc= anQueue, + qemu_dr= iver); + if (!qemu_driver->workerPool) goto error; =20 @@ -3645,61 +3645,6 @@ qemuDomainScreenshot(virDomainPtr dom, } =20 =20 - - - - - - - - -static void qemuProcessEventHandler(void *data, void *opaque) -{ - struct qemuProcessEvent *processEvent =3D data; - virDomainObjPtr vm =3D processEvent->vm; - virQEMUDriverPtr driver =3D opaque; - - VIR_DEBUG("vm=3D%p, event=3D%d", vm, processEvent->eventType); - - virObjectLock(vm); - - switch (processEvent->eventType) { - case QEMU_PROCESS_EVENT_WATCHDOG: - processWatchdogEvent(driver, vm, processEvent->action); - break; - case QEMU_PROCESS_EVENT_GUESTPANIC: - processGuestPanicEvent(driver, vm, processEvent->action, - processEvent->data); - break; - case QEMU_PROCESS_EVENT_DEVICE_DELETED: - processDeviceDeletedEvent(driver, vm, processEvent->data); - break; - case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED: - processNicRxFilterChangedEvent(driver, vm, processEvent->data); - break; - case QEMU_PROCESS_EVENT_SERIAL_CHANGED: - processSerialChangedEvent(driver, vm, processEvent->data, - processEvent->action); - break; - case QEMU_PROCESS_EVENT_BLOCK_JOB: - processBlockJobEvent(driver, vm, - processEvent->data, - processEvent->action, - processEvent->status); - break; - case QEMU_PROCESS_EVENT_MONITOR_EOF: - processMonitorEOFEvent(driver, vm); - break; - case QEMU_PROCESS_EVENT_LAST: - break; - } - - virDomainConsumeVMEvents(vm, driver); - virDomainObjEndAPI(&vm); - VIR_FREE(processEvent); -} - - static int qemuDomainSetVcpusAgent(virDomainObjPtr vm, unsigned int nvcpus) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d2b5fe8..f9270e0 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -962,21 +962,11 @@ qemuProcessEventHandleWatchdog1(qemuEventPtr ev, } =20 if (vm->def->watchdog->action =3D=3D VIR_DOMAIN_WATCHDOG_ACTION_DUMP) { - struct qemuProcessEvent *processEvent; - if (VIR_ALLOC(processEvent) =3D=3D 0) { - processEvent->eventType =3D QEMU_PROCESS_EVENT_WATCHDOG; - processEvent->action =3D VIR_DOMAIN_WATCHDOG_ACTION_DUMP; - processEvent->vm =3D vm; - /* Hold an extra reference because we can't allow 'vm' to be - * deleted before handling watchdog event is finished. - */ - virObjectRef(vm); - if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) = < 0) { - if (!virObjectUnref(vm)) - vm =3D NULL; - VIR_FREE(processEvent); - } - } + /* Hold an extra reference because we can't allow 'vm' to be + * deleted before handling watchdog event is finished.*/ + virObjectRef(vm); + processWatchdogEvent(driver, vm, VIR_DOMAIN_WATCHDOG_ACTION_DUMP); + virObjectUnref(vm); } =20 qemuDomainEventQueue(driver, watchdogEvent); @@ -1068,12 +1058,10 @@ qemuProcessEventHandleBlockJob(qemuEventPtr ev, void *opaque) { virQEMUDriverPtr driver =3D opaque; - struct qemuProcessEvent *processEvent =3D NULL; virDomainDiskDefPtr disk; qemuDomainDiskPrivatePtr diskPriv; - char *data =3D NULL; virDomainObjPtr vm; - const char *diskAlias; + char *diskAlias =3D NULL; int type, status; =20 if (!ev) @@ -1082,7 +1070,7 @@ qemuProcessEventHandleBlockJob(qemuEventPtr ev, =20 if (!ev->vm) { VIR_WARN("Unable to locate VM, dropping Block Job event"); - goto cleanup; + goto error; } =20 diskAlias =3D ev->evData.ev_blockJob.device; @@ -1103,31 +1091,16 @@ qemuProcessEventHandleBlockJob(qemuEventPtr ev, virDomainObjBroadcast(vm); } else { /* there is no waiting SYNC API, dispatch the update to a thread */ - if (VIR_ALLOC(processEvent) < 0) - goto error; - - processEvent->eventType =3D QEMU_PROCESS_EVENT_BLOCK_JOB; - if (VIR_STRDUP(data, diskAlias) < 0) - goto error; - processEvent->data =3D data; - processEvent->vm =3D vm; - processEvent->action =3D type; - processEvent->status =3D status; =20 virObjectRef(vm); - if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0)= { - ignore_value(virObjectUnref(vm)); - goto error; - } + processBlockJobEvent(driver, vm, diskAlias, type, status); + virObjectUnref(vm); } =20 - cleanup: +error: + if (diskAlias) + VIR_FREE(diskAlias); return; - error: - if (processEvent) - VIR_FREE(processEvent->data); - VIR_FREE(processEvent); - goto cleanup; } =20 static void @@ -1465,7 +1438,6 @@ qemuProcessEventHandleGuestPanic(qemuEventPtr ev, void *opaque) { virQEMUDriverPtr driver =3D opaque; - struct qemuProcessEvent *processEvent; virDomainObjPtr vm; qemuMonitorEventPanicInfoPtr info; =20 @@ -1479,22 +1451,12 @@ qemuProcessEventHandleGuestPanic(qemuEventPtr ev, } =20 info =3D ev->evData.ev_panic.info; - if (VIR_ALLOC(processEvent) < 0) - goto exit; - - processEvent->eventType =3D QEMU_PROCESS_EVENT_GUESTPANIC; - processEvent->action =3D vm->def->onCrash; - processEvent->vm =3D vm; - processEvent->data =3D info; /* Hold an extra reference because we can't allow 'vm' to be * deleted before handling guest panic event is finished. */ virObjectRef(vm); - if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - if (!virObjectUnref(vm)) - vm =3D NULL; - VIR_FREE(processEvent); - } + processGuestPanicEvent(driver, vm, vm->def->onCrash, info); + virObjectUnref(vm); =20 exit: return; @@ -1506,10 +1468,8 @@ qemuProcessEventHandleDeviceDeleted(qemuEventPtr ev, void *opaque) { virQEMUDriverPtr driver =3D opaque; - struct qemuProcessEvent *processEvent =3D NULL; - char *data; virDomainObjPtr vm; - const char *devAlias; + char *devAlias =3D NULL; =20 if (!ev) return; @@ -1528,29 +1488,14 @@ qemuProcessEventHandleDeviceDeleted(qemuEventPtr ev, QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS= _OK)) goto cleanup; =20 - if (VIR_ALLOC(processEvent) < 0) - goto error; - - processEvent->eventType =3D QEMU_PROCESS_EVENT_DEVICE_DELETED; - if (VIR_STRDUP(data, devAlias) < 0) - goto error; - processEvent->data =3D data; - processEvent->vm =3D vm; - virObjectRef(vm); - if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); - goto error; - } + processDeviceDeletedEvent(driver, vm, devAlias); + virObjectUnref(vm); =20 cleanup: - VIR_FREE(ev->evData.ev_deviceDel.device); + if (ev->evData.ev_deviceDel.device) + VIR_FREE(ev->evData.ev_deviceDel.device); return; - error: - if (processEvent) - VIR_FREE(processEvent->data); - VIR_FREE(processEvent); - goto cleanup; } =20 =20 @@ -1744,8 +1689,6 @@ qemuProcessEventHandleSerialChanged(qemuEventPtr ev, void *opaque) { virQEMUDriverPtr driver =3D opaque; - struct qemuProcessEvent *processEvent =3D NULL; - char *data; virDomainObjPtr vm; char *devAlias; bool connected; @@ -1764,30 +1707,14 @@ qemuProcessEventHandleSerialChanged(qemuEventPtr ev, VIR_DEBUG("Serial port %s state changed to '%d' in domain %p %s", devAlias, connected, vm, vm->def->name); =20 - if (VIR_ALLOC(processEvent) < 0) - goto error; - - processEvent->eventType =3D QEMU_PROCESS_EVENT_SERIAL_CHANGED; - if (VIR_STRDUP(data, devAlias) < 0) - goto error; - processEvent->data =3D data; - processEvent->action =3D connected; - processEvent->vm =3D vm; =20 virObjectRef(vm); - if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); - goto error; - } + processSerialChangedEvent(driver, vm, devAlias, connected); + virObjectUnref(vm); =20 cleanup: VIR_FREE(ev->evData.ev_serial.devAlias); return; - error: - if (processEvent) - VIR_FREE(processEvent->data); - VIR_FREE(processEvent); - goto cleanup; } =20 =20 @@ -1934,7 +1861,11 @@ qemuProcessEnqueueEvent(qemuMonitorPtr mon ATTRIBUTE= _UNUSED, /* Bad code alert: Fix this lookup to scan table for correct index. * Works for now since event table is sorted */ ev->handler =3D qemuEventFunctions[ev->ev_type].handler_func; - return virEnqueueVMEvent(driver->ev_list, ev); + if (!virEnqueueVMEvent(driver->ev_list, ev)) { + /* Bad code alert #2: Use a better notification mechanism */ + return virThreadPoolSendJob(driver->workerPool, 0, NULL); + } + return -1; } =20 static qemuMonitorCallbacks monitorCallbacks =3D { --=20 2.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list