[Spice-devel] [PATCH qxl-wddm-dod 06/26] Add functions called from non-pageable functions to non-paged segments
Sameeh Jubran
sameeh at daynix.com
Wed Aug 17 16:06:01 UTC 2016
This patch isn't needed after all as all the code in the driver is nonpaged
by default.
The code can be made pageable by adding PAGE segment as follows:
#pragma code_seg(push)
#pragma code_seg("PAGE")
These two functions are already nonpaged.
On Wed, Aug 17, 2016 at 12:55 PM, Frediano Ziglio <fziglio at redhat.com>
wrote:
> >
> > From: Sandy Stutsman <sstutsma at redhat.com>
> >
> > Found by Driver Verifier
>
> I would avoid to move function and just add #pragma code_seg(s)
>
> Frediano
>
> > ---
> > qxldod/QxlDod.cpp | 55
> > ++++++++++++++++++++++++++++++++-----------------------
> > 1 file changed, 32 insertions(+), 23 deletions(-)
> >
> > diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
> > index 1225f04..1b3bdf1 100755
> > --- a/qxldod/QxlDod.cpp
> > +++ b/qxldod/QxlDod.cpp
> > @@ -44,6 +44,7 @@ BYTE PixelMask[BITS_PER_BYTE] = {0x80, 0x40, 0x20,
> 0x10,
> > 0x08, 0x04, 0x02, 0x01
> >
> > #pragma code_seg(pop)
> >
> > +#pragma code_seg("PAGE")
> >
> >
> > QxlDod::QxlDod(_In_ DEVICE_OBJECT* pPhysicalDeviceObject) :
> > m_pPhysicalDevice(pPhysicalDeviceObject),
> > @@ -1916,6 +1917,20 @@ NTSTATUS QxlDod::RegisterHWInfo(ULONG Id)
> > //
> > #pragma code_seg(push)
> > #pragma code_seg()
> > +
> > +UINT BPPFromPixelFormat(D3DDDIFORMAT Format)
> > +{
> > + switch (Format) {
> > + case D3DDDIFMT_UNKNOWN: return 0;
> > + case D3DDDIFMT_P8: return 8;
> > + case D3DDDIFMT_R5G6B5: return 16;
> > + case D3DDDIFMT_R8G8B8: return 24;
> > + case D3DDDIFMT_X8R8G8B8: // fall through
> > + case D3DDDIFMT_A8R8G8B8: return 32;
> > + default: QXL_LOG_ASSERTION1("Unknown D3DDDIFORMAT 0x%I64x", Format);
> > return 0;
> > + }
> > +}
> > +
> > D3DDDI_VIDEO_PRESENT_SOURCE_ID
> > QxlDod::FindSourceForTarget(D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
> > BOOLEAN DefaultToZero)
> > {
> > UNREFERENCED_PARAMETER(TargetId);
> > @@ -1930,7 +1945,6 @@ D3DDDI_VIDEO_PRESENT_SOURCE_ID
> > QxlDod::FindSourceForTarget(D3DDDI_VIDEO_PRESENT_
> > return DefaultToZero ? 0 : D3DDDI_ID_UNINITIALIZED;
> > }
> >
> > -#pragma code_seg(pop) // End Non-Paged Code
> >
> > //
> > // Frame buffer map/unmap
> > @@ -2278,6 +2292,7 @@ VOID BltBits (
> > DbgPrint(TRACE_LEVEL_ERROR, ("Either dst (0x%I64x) or src
> (0x%I64x)
> > bits encountered exception during access.\n", pDst->pBits,
> > pSrc->pBits));
> > }
> > }
> > +#pragma code_seg(pop) // End Non-Paged Code
> >
> > VgaDevice::VgaDevice(_In_ QxlDod* pQxlDod)
> > {
> > @@ -2862,6 +2877,9 @@ VOID VgaDevice::BlackOutScreen(CURRENT_BDD_MODE*
> > pCurrentBddMod)
> > pCurrentBddMod->ZeroedOutStart.QuadPart =
> NewPhysAddrStart.QuadPart;
> > pCurrentBddMod->ZeroedOutEnd.QuadPart = NewPhysAddrEnd.QuadPart;
> > }
> > +#pragma code_seg(push)
> > +#pragma code_seg()
> > +// BEGIN: Non-Paged Code Segment
> >
> > BOOLEAN VgaDevice::InterruptRoutine(_In_ PDXGKRNL_INTERFACE
> pDxgkInterface,
> > _In_ ULONG MessageNumber)
> > {
> > @@ -2877,6 +2895,7 @@ VOID VgaDevice::DpcRoutine(PVOID)
> > VOID VgaDevice::ResetDevice(VOID)
> > {
> > }
> > +#pragma code_seg(pop) //end non-paged code
> >
> > NTSTATUS VgaDevice::SetPointerShape(_In_ CONST
> DXGKARG_SETPOINTERSHAPE*
> > pSetPointerShape)
> > {
> > @@ -3530,14 +3549,6 @@ void QxlDevice::InitMspace(UINT32 mspace_type,
> UINT8
> > *start, size_t capacity)
> > DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s _mspace = %p\n",
> __FUNCTION__,
> > m_MSInfo[mspace_type]._mspace));
> > }
> >
> > -void QxlDevice::ResetDevice(void)
> > -{
> > - DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> > - m_RamHdr->int_mask = ~0;
> > - WRITE_PORT_UCHAR(m_IoBase + QXL_IO_MEMSLOT_ADD, 0);
> > - DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> > -}
> > -
> > NTSTATUS
> > QxlDevice::ExecutePresentDisplayOnly(
> > _In_ BYTE* DstAddr,
> > @@ -4484,6 +4495,9 @@ VOID QxlDevice::PushCursor(VOID)
> > DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s notify = %d\n",
> __FUNCTION__,
> > notify));
> > }
> >
> > +#pragma code_seg(push)
> > +#pragma code_seg()
> > +// BEGIN: Non-Paged Code Segment
> > BOOLEAN QxlDevice::InterruptRoutine(_In_ PDXGKRNL_INTERFACE
> pDxgkInterface,
> > _In_ ULONG MessageNumber)
> > {
> > UNREFERENCED_PARAMETER(MessageNumber);
> > @@ -4543,6 +4557,15 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)
> > DbgPrint(TRACE_LEVEL_INFORMATION, ("<--- %s\n", __FUNCTION__));
> > }
> >
> > +void QxlDevice::ResetDevice(void)
> > +{
> > + DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> > + m_RamHdr->int_mask = ~0;
> > + WRITE_PORT_UCHAR(m_IoBase + QXL_IO_MEMSLOT_ADD, 0);
> > + DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
> > +}
> > +#pragma code_seg(pop) //end non-paged code
> > +
> > VOID QxlDevice::UpdateArea(CONST RECT* area, UINT32 surface_id)
> > {
> > DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
> > @@ -4569,20 +4592,6 @@ VOID QxlDevice::DpcCallback(PDPC_CB_CONTEXT ctx)
> >
> > }
> >
> > -UINT BPPFromPixelFormat(D3DDDIFORMAT Format)
> > -{
> > - switch (Format)
> > - {
> > - case D3DDDIFMT_UNKNOWN: return 0;
> > - case D3DDDIFMT_P8: return 8;
> > - case D3DDDIFMT_R5G6B5: return 16;
> > - case D3DDDIFMT_R8G8B8: return 24;
> > - case D3DDDIFMT_X8R8G8B8: // fall through
> > - case D3DDDIFMT_A8R8G8B8: return 32;
> > - default: QXL_LOG_ASSERTION1("Unknown D3DDDIFORMAT 0x%I64x",
> Format);
> > return 0;
> > - }
> > -}
> > -
> > // Given bits per pixel, return the pixel format at the same bpp
> > D3DDDIFORMAT PixelFormatFromBPP(UINT BPP)
> > {
>
>
--
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Junior Software Engineer @ Daynix <http://www.daynix.com>.*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160817/722d6c50/attachment-0001.html>
More information about the Spice-devel
mailing list