[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS


  • To: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>, "win-pv-devel@xxxxxxxxxxxxxxxxxxxx" <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Thu, 15 Oct 2026 08:30:40 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GXmoVi1f/OHIhu1OwyuruH1ZfLM7gXRDdMEBJwDB1Mg=; b=kd3otM6sitAYHWTGVcNo8KdOnGjcMI+sebBE9IgWNCDcN9+Nd+6iBuOj6JCm4GrYEztVLG5w6cVpzpUmMhwgCJo6Y1wuWvQVdRfPbndwwv5s2uOu49VUswuXx/AXMjR4hv7/zsCklFobdwHUDy88BQZqzshkp62WNRKCswtGBx+C7t9WD7ipbx9mHEtLkgcscCh9VCrdw0JIosZYgyzn4m3KmnEn/WnV6We3B6QtUWE+UMV/Zf6Rq7KPeqjp05k5Vl33D48O9/g4xDogD6rUH3k1j4UfmXi3646S/GXCWN4607jSmNp+dbIS4ZEWq1TqwBDxdOqiwZIac2F6oAgVlw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s/2scaHESlIuCqliS6AriakZ+1+dOEqKijjyud6Ie6NlXdd2aMlr/ELdbJ4TdQJLbD/bJlq2LBceVg84jwRWHefSLWr7lHYASWx/6oiy3HV1hTe5WdTtSudujnO6MCdfYEar7jAFu6G9skB+GXKhXbDuOzCN4NcXBnDo1oInnZ2Upp0ehxHjx7KsJFuMNotQMw6nZMQ728oYfPqkH4tZ/hCB+axYmF/gE9uYK4uupqzC/eAjuln+WROuFjxRGuocdqA8itI0HrrYuwUe6BbpRgPE6rFpQbedkiWux4jo/YF4mn8v1MFp+xe9ij5c/kRnvd75oB6AO3rbllGF4zhg6Q==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Delivery-date: Thu, 15 Oct 2026 08:30:45 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHdW8bU7OD+xsxYnE+lEq+iJP4rnLb+RsGX
  • Thread-topic: [PATCH 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS

> @@ -500,6 +502,24 @@ ReceiverInitialize(
>      RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
>      (*Receiver)->Adapter = Adapter;
> 
> +    (*Receiver)->ProcessorCount = 
> KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
> +    XENVIF_VIF(QueryRingCount,
> +               AdapterGetVifInterface(Adapter),
> +               &Dummy,
> +               &(*Receiver)->RingCount);
> +
> +    (*Receiver)->GetList = __AllocatePoolWithTag(NonPagedPool,
> +                                                 (*Receiver)->ProcessorCount 
> * sizeof(PNET_BUFFER_LIST),
> +                                                 RECEIVER_POOL_TAG);
> +    if ((*Receiver)->GetList == NULL)
> +        goto fail2;
> +
> +    (*Receiver)->Queue = __AllocatePoolWithTag(NonPagedPool,
> +                                               (*Receiver)->RingCount * 
> sizeof(XENNET_RECEIVER_QUEUE),
> +                                               RECEIVER_POOL_TAG);
> +    if ((*Receiver)->Queue == NULL)
> +        goto fail3;
> +
>      RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
>      Params.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
>      Params.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
> @@ -514,9 +534,9 @@ ReceiverInitialize(
> 
>      status = NDIS_STATUS_RESOURCES;
>      if ((*Receiver)->NetBufferListPool == NULL)
> -        goto fail2;
> +        goto fail4;
> 
> -    for (Index = 0; Index < HVM_MAX_VCPUS; Index++) {
> +    for (Index = 0; Index < (*Receiver)->RingCount; Index++) {
>          PXENNET_RECEIVER_QUEUE  Queue = &(*Receiver)->Queue[Index];
> 
>          KeInitializeSpinLock(&Queue->Lock);
> @@ -524,8 +544,29 @@ ReceiverInitialize(
> 
>      return NDIS_STATUS_SUCCESS;
> 
> +fail4:
> +    Error("fail4\n");
> +
> +    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
> +    (*Receiver)->Queue = NULL;
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    (*Receiver)->RingCount = 0;
> +    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
> +    (*Receiver)->GetList = NULL;
> +
>  fail2:
> +    Error("fail2\n");
> +

(*Receiver)->RingCount should to be zeroed here, as its assigned before
the goto fail2;


> +    (*Receiver)->ProcessorCount = 0;
> +    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
> +    *Receiver = NULL;
> +
>  fail1:
> +    Error("fail1 (%08x)\n", status);
> +
>      return status;
>  }
> 
> @@ -541,7 +582,7 @@ ReceiverTeardown(
> 
>      ASSERT3U(Receiver->Returned, ==, Receiver->Indicated);
> 
> -    for (Index = 0; Index < HVM_MAX_VCPUS; Index++) {
> +    for (Index = 0; Index < Receiver->ProcessorCount; Index++) {
>          NetBufferList = Receiver->GetList[Index];
> 
>          while (NetBufferList != NULL) {
> @@ -571,6 +612,12 @@ ReceiverTeardown(
>      NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
>      Receiver->NetBufferListPool = NULL;
> 
> +    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
> +    Receiver->Queue = NULL;
> +
> +    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
> +    Receiver->GetList = NULL;
> +
>      Receiver->Adapter = NULL;
> 

Receiver->ProcessorCount and Receiver->RingCount should be zeroed for
consistency

>      __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
> --

Owen


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.