[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 02/11] OvmfPkg/XenBusDxe: Have XenStoreFindWatch take a pointer
Rework XenStoreFindWatch() to be able to search for a registered watch with a pointer instead of a string. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2190 Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- OvmfPkg/XenBusDxe/XenStore.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/OvmfPkg/XenBusDxe/XenStore.c b/OvmfPkg/XenBusDxe/XenStore.c index 7253d8ae37..727641a0fe 100644 --- a/OvmfPkg/XenBusDxe/XenStore.c +++ b/OvmfPkg/XenBusDxe/XenStore.c @@ -253,14 +253,12 @@ Split ( STATIC XENSTORE_WATCH * XenStoreFindWatch ( - IN CONST CHAR8 *Token + IN VOID *Token ) { - XENSTORE_WATCH *Watch, *WantedWatch; + XENSTORE_WATCH *Watch; LIST_ENTRY *Entry; - WantedWatch = (VOID *) AsciiStrHexToUintn (Token); - if (IsListEmpty (&xs.RegisteredWatches)) { return NULL; } @@ -268,7 +266,7 @@ XenStoreFindWatch ( !IsNull (&xs.RegisteredWatches, Entry); Entry = GetNextNode (&xs.RegisteredWatches, Entry)) { Watch = XENSTORE_WATCH_FROM_LINK (Entry); - if (Watch == WantedWatch) + if ((VOID *) Watch == Token) return Watch; } @@ -632,12 +630,16 @@ XenStoreProcessMessage ( Body[Message->Header.len] = '\0'; if (Message->Header.type == XS_WATCH_EVENT) { + VOID *ConvertedToken; + Message->u.Watch.Vector = Split(Body, Message->Header.len, &Message->u.Watch.VectorSize); + ConvertedToken = + (VOID *) AsciiStrHexToUintn (Message->u.Watch.Vector[XS_WATCH_TOKEN]); + EfiAcquireLock (&xs.RegisteredWatchesLock); - Message->u.Watch.Handle = - XenStoreFindWatch (Message->u.Watch.Vector[XS_WATCH_TOKEN]); + Message->u.Watch.Handle = XenStoreFindWatch (ConvertedToken); DEBUG ((EFI_D_INFO, "XenStore: Watch event %a\n", Message->u.Watch.Vector[XS_WATCH_TOKEN])); if (Message->u.Watch.Handle != NULL) { @@ -1384,8 +1386,7 @@ XenStoreUnregisterWatch ( ASSERT (Watch->Signature == XENSTORE_WATCH_SIGNATURE); - AsciiSPrint (Token, sizeof (Token), "%p", (VOID *) Watch); - if (XenStoreFindWatch (Token) == NULL) { + if (XenStoreFindWatch (Watch) == NULL) { return; } @@ -1393,6 +1394,7 @@ XenStoreUnregisterWatch ( RemoveEntryList (&Watch->Link); EfiReleaseLock (&xs.RegisteredWatchesLock); + AsciiSPrint (Token, sizeof (Token), "%p", (VOID *) Watch); XenStoreUnwatch (Watch->Node, Token); /* Cancel pending watch events. */ -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |