<div dir="ltr">This patch isn't needed after all as all the code in the driver is nonpaged by default.<div>The code can be made pageable by adding PAGE segment as follows:</div><div><br></div><div><div>#pragma code_seg(push)</div><div>#pragma code_seg("PAGE")</div></div><div><br></div><div>These two functions are already nonpaged. </div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 17, 2016 at 12:55 PM, Frediano Ziglio <span dir="ltr"><<a href="mailto:fziglio@redhat.com" target="_blank">fziglio@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">><br>
> From: Sandy Stutsman <<a href="mailto:sstutsma@redhat.com">sstutsma@redhat.com</a>><br>
><br>
> Found by Driver Verifier<br>
<br>
</span>I would avoid to move function and just add #pragma code_seg(s)<br>
<span class="HOEnZb"><font color="#888888"><br>
Frediano<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> ---<br>
>  qxldod/QxlDod.cpp | 55<br>
>  ++++++++++++++++++++++++++++++<wbr>++-----------------------<br>
>  1 file changed, 32 insertions(+), 23 deletions(-)<br>
><br>
> diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp<br>
> index 1225f04..1b3bdf1 100755<br>
> --- a/qxldod/QxlDod.cpp<br>
> +++ b/qxldod/QxlDod.cpp<br>
> @@ -44,6 +44,7 @@ BYTE PixelMask[BITS_PER_BYTE]  = {0x80, 0x40, 0x20, 0x10,<br>
> 0x08, 0x04, 0x02, 0x01<br>
><br>
>  #pragma code_seg(pop)<br>
><br>
> +#pragma code_seg("PAGE")<br>
><br>
><br>
>  QxlDod::QxlDod(_In_ DEVICE_OBJECT* pPhysicalDeviceObject) :<br>
>  m_pPhysicalDevice(<wbr>pPhysicalDeviceObject),<br>
> @@ -1916,6 +1917,20 @@ NTSTATUS QxlDod::RegisterHWInfo(ULONG Id)<br>
>  //<br>
>  #pragma code_seg(push)<br>
>  #pragma code_seg()<br>
> +<br>
> +UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format)<br>
> +{<br>
> +    switch (Format) {<br>
> +    case D3DDDIFMT_UNKNOWN: return 0;<br>
> +    case D3DDDIFMT_P8: return 8;<br>
> +    case D3DDDIFMT_R5G6B5: return 16;<br>
> +    case D3DDDIFMT_R8G8B8: return 24;<br>
> +    case D3DDDIFMT_X8R8G8B8: // fall through<br>
> +    case D3DDDIFMT_A8R8G8B8: return 32;<br>
> +    default: QXL_LOG_ASSERTION1("Unknown D3DDDIFORMAT 0x%I64x", Format);<br>
> return 0;<br>
> +    }<br>
> +}<br>
> +<br>
>  D3DDDI_VIDEO_PRESENT_SOURCE_ID<br>
>  QxlDod::FindSourceForTarget(<wbr>D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,<br>
>  BOOLEAN DefaultToZero)<br>
>  {<br>
>      UNREFERENCED_PARAMETER(<wbr>TargetId);<br>
> @@ -1930,7 +1945,6 @@ D3DDDI_VIDEO_PRESENT_SOURCE_ID<br>
> QxlDod::FindSourceForTarget(<wbr>D3DDDI_VIDEO_PRESENT_<br>
>      return DefaultToZero ? 0 : D3DDDI_ID_UNINITIALIZED;<br>
>  }<br>
><br>
> -#pragma code_seg(pop) // End Non-Paged Code<br>
><br>
>  //<br>
>  // Frame buffer map/unmap<br>
> @@ -2278,6 +2292,7 @@ VOID BltBits (<br>
>          DbgPrint(TRACE_LEVEL_ERROR, ("Either dst (0x%I64x) or src (0x%I64x)<br>
>          bits encountered exception during access.\n", pDst->pBits,<br>
>          pSrc->pBits));<br>
>      }<br>
>  }<br>
> +#pragma code_seg(pop) // End Non-Paged Code<br>
><br>
>  VgaDevice::VgaDevice(_In_ QxlDod* pQxlDod)<br>
>  {<br>
> @@ -2862,6 +2877,9 @@ VOID VgaDevice::BlackOutScreen(<wbr>CURRENT_BDD_MODE*<br>
> pCurrentBddMod)<br>
>      pCurrentBddMod-><wbr>ZeroedOutStart.QuadPart = NewPhysAddrStart.QuadPart;<br>
>      pCurrentBddMod->ZeroedOutEnd.<wbr>QuadPart = NewPhysAddrEnd.QuadPart;<br>
>  }<br>
> +#pragma code_seg(push)<br>
> +#pragma code_seg()<br>
> +// BEGIN: Non-Paged Code Segment<br>
><br>
>  BOOLEAN VgaDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface,<br>
>  _In_  ULONG MessageNumber)<br>
>  {<br>
> @@ -2877,6 +2895,7 @@ VOID VgaDevice::DpcRoutine(PVOID)<br>
>  VOID VgaDevice::ResetDevice(VOID)<br>
>  {<br>
>  }<br>
> +#pragma  code_seg(pop) //end non-paged code<br>
><br>
>  NTSTATUS  VgaDevice::SetPointerShape(_<wbr>In_ CONST DXGKARG_SETPOINTERSHAPE*<br>
>  pSetPointerShape)<br>
>  {<br>
> @@ -3530,14 +3549,6 @@ void QxlDevice::InitMspace(UINT32 mspace_type, UINT8<br>
> *start, size_t capacity)<br>
>      DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s _mspace = %p\n", __FUNCTION__,<br>
>      m_MSInfo[mspace_type]._mspace)<wbr>);<br>
>  }<br>
><br>
> -void QxlDevice::ResetDevice(void)<br>
> -{<br>
> -    DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));<br>
> -    m_RamHdr->int_mask = ~0;<br>
> -    WRITE_PORT_UCHAR(m_IoBase + QXL_IO_MEMSLOT_ADD, 0);<br>
> -    DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));<br>
> -}<br>
> -<br>
>  NTSTATUS<br>
>  QxlDevice::<wbr>ExecutePresentDisplayOnly(<br>
>      _In_ BYTE*             DstAddr,<br>
> @@ -4484,6 +4495,9 @@ VOID QxlDevice::PushCursor(VOID)<br>
>      DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s notify = %d\n", __FUNCTION__,<br>
>      notify));<br>
>  }<br>
><br>
> +#pragma code_seg(push)<br>
> +#pragma code_seg()<br>
> +// BEGIN: Non-Paged Code Segment<br>
>  BOOLEAN QxlDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface,<br>
>  _In_  ULONG MessageNumber)<br>
>  {<br>
>      UNREFERENCED_PARAMETER(<wbr>MessageNumber);<br>
> @@ -4543,6 +4557,15 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)<br>
>      DbgPrint(TRACE_LEVEL_<wbr>INFORMATION, ("<--- %s\n", __FUNCTION__));<br>
>  }<br>
><br>
> +void QxlDevice::ResetDevice(void)<br>
> +{<br>
> +    DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));<br>
> +    m_RamHdr->int_mask = ~0;<br>
> +    WRITE_PORT_UCHAR(m_IoBase + QXL_IO_MEMSLOT_ADD, 0);<br>
> +    DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));<br>
> +}<br>
> +#pragma code_seg(pop) //end non-paged code<br>
> +<br>
>  VOID QxlDevice::UpdateArea(CONST RECT* area, UINT32 surface_id)<br>
>  {<br>
>      DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));<br>
> @@ -4569,20 +4592,6 @@ VOID QxlDevice::DpcCallback(PDPC_<wbr>CB_CONTEXT ctx)<br>
><br>
>  }<br>
><br>
> -UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format)<br>
> -{<br>
> -    switch (Format)<br>
> -    {<br>
> -        case D3DDDIFMT_UNKNOWN: return 0;<br>
> -        case D3DDDIFMT_P8: return 8;<br>
> -        case D3DDDIFMT_R5G6B5: return 16;<br>
> -        case D3DDDIFMT_R8G8B8: return 24;<br>
> -        case D3DDDIFMT_X8R8G8B8: // fall through<br>
> -        case D3DDDIFMT_A8R8G8B8: return 32;<br>
> -        default: QXL_LOG_ASSERTION1("Unknown D3DDDIFORMAT 0x%I64x", Format);<br>
> return 0;<br>
> -    }<br>
> -}<br>
> -<br>
>  // Given bits per pixel, return the pixel format at the same bpp<br>
>  D3DDDIFORMAT PixelFormatFromBPP(UINT BPP)<br>
>  {<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><font size="4" color="#0b5394" face="times new roman, serif">Respectfully,<br></font><div style="font-size:12.8px;color:rgb(136,136,136)"><font size="4" color="#0b5394" face="times new roman, serif"><b><i>Sameeh Jubran</i></b></font></div><div style="font-size:12.8px;color:rgb(136,136,136)"><i style="color:rgb(7,55,99);font-family:"times new roman",serif;font-size:large"><span style="line-height:15px"><a href="https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a" title="View public profile" name="UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_14e2c1de96f8c195_UNIQUE_ID_SafeHtmlFilter_SafeHtmlFilter_SafeHtmlFilter_webProfileURL" style="color:rgb(17,85,204);margin:0px;padding:0px;border-width:0px;outline:none;vertical-align:baseline;text-decoration:none" target="_blank">Linkedin</a></span></i><br></div><div style="font-size:12.8px;color:rgb(136,136,136)"><font size="4" face="times new roman, serif" color="#073763"><i>Junior Software Engineer @ <a href="http://www.daynix.com" target="_blank">Daynix</a>.</i></font></div></div></div></div></div></div></div>
</div>