Re: [edk2-devel] [PATCH 02/11] OvmfPkg/XenBusDxe: Have XenStoreFindWatch take a pointer

2019-09-16 Thread Laszlo Ersek
On 09/13/19 16:50, Anthony PERARD wrote:
> 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 
> ---
>  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 ()) {
>  return NULL;
>}
> @@ -268,7 +266,7 @@ XenStoreFindWatch (
> !IsNull (, Entry);
> Entry = GetNextNode (, 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,
>  >u.Watch.VectorSize);
>  
> +ConvertedToken =
> +  (VOID *) AsciiStrHexToUintn (Message->u.Watch.Vector[XS_WATCH_TOKEN]);
> +
>  EfiAcquireLock ();
> -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 (>Link);
>EfiReleaseLock ();
>  
> +  AsciiSPrint (Token, sizeof (Token), "%p", (VOID *) Watch);
>XenStoreUnwatch (Watch->Node, Token);
>  
>/* Cancel pending watch events. */
> 

Reviewed-by: Laszlo Ersek 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#47280): https://edk2.groups.io/g/devel/message/47280
Mute This Topic: https://groups.io/mt/34128012/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



[edk2-devel] [PATCH 02/11] OvmfPkg/XenBusDxe: Have XenStoreFindWatch take a pointer

2019-09-13 Thread Anthony PERARD
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 
---
 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 ()) {
 return NULL;
   }
@@ -268,7 +266,7 @@ XenStoreFindWatch (
!IsNull (, Entry);
Entry = GetNextNode (, 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,
 >u.Watch.VectorSize);
 
+ConvertedToken =
+  (VOID *) AsciiStrHexToUintn (Message->u.Watch.Vector[XS_WATCH_TOKEN]);
+
 EfiAcquireLock ();
-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 (>Link);
   EfiReleaseLock ();
 
+  AsciiSPrint (Token, sizeof (Token), "%p", (VOID *) Watch);
   XenStoreUnwatch (Watch->Node, Token);
 
   /* Cancel pending watch events. */
-- 
Anthony PERARD


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#47211): https://edk2.groups.io/g/devel/message/47211
Mute This Topic: https://groups.io/mt/34128012/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-