[dpdk-dev] [PATCH 1/1] virt2phys: virtual to physical address translator for Windows

Ranjit Menon ranjit.menon at intel.com
Fri Apr 10 21:39:13 CEST 2020


On 4/9/2020 7:50 PM, Dmitry Kozlyuk wrote:
>>> +
>>> +_Use_decl_annotations_
>>> +VOID
>>> +virt2phys_device_EvtIoInCallerContext(
>>> +	IN WDFDEVICE device, IN WDFREQUEST request)
>>> +{
>>> +	WDF_REQUEST_PARAMETERS params;
>>> +	ULONG code;
>>> +	PVOID *virt;
>>
>> Should this be PVOID virt; (instead of PVOID *virt)?
>> If so, changes will be required to parameters passed in to
>> WdfRequestRetrieveInputBuffer() call.
> 
> This should be PVOID *virt (pointer to an untyped pointer). User-mode passes
> a virtual address as a PVOID value, WdfRequestRetrieveInputBuffer() fills
> virt with the address of that parameter, so that *virt is the virtual address
> user-mode wants to translate into a physical one.
> 

Makes sense. Thanks for the explanation, Dmitry.

>>
>>> +	PHYSICAL_ADDRESS *phys;
>>> +	size_t size;
>>> +	NTSTATUS status;
>>> +
> [snip]
>>> +
>>> +	status = WdfRequestRetrieveOutputBuffer(
>>> +		request, sizeof(*phys), &phys, &size);
>>
>> Better to put a (PVOID *)typecast for &phys here:
>> 	status = WdfRequestRetrieveOutputBuffer(
>> 		request, sizeof(*phys), (PVOID *)&phys, &size);
> 
> What do you mean? Without a typecast the built-in static analyzer emits a
> warning (and all warnings are treated as errors for a driver):
> 
> virt2phys.c(108,46): error C2220: the following warning is treated as an error
> virt2phys.c(108,46): warning C4047: 'function': 'PVOID *' differs in levels of indirection from 'PVOID **'
> virt2phys.c(108,46): warning C4022: 'WdfRequestRetrieveInputBuffer': pointer mismatch for actual parameter 3
> 
>>> +	if (!NT_SUCCESS(status)) {
>>> +		KdPrint(("WdfRequestRetrieveOutputBuffer() failed, "
>>> +			"status=%08x\n", status));
>>> +		WdfRequestComplete(request, status);
>>> +		return;
>>> +	}
>>> +
>>> +	*phys = MmGetPhysicalAddress(*virt);
>>> +
>>> +	WdfRequestCompleteWithInformation(
>>> +		request, STATUS_SUCCESS, sizeof(*phys));
>>> +}
>>
>> <Snip!>
>>
>> Co-installers are no longer required (and discouraged) as per Microsoft.
>> So you can remove the lines indicated below from the .inf file.
> 
> Thanks, will remove in v2. They were generated by WDK solution template.
> 

I see the above changes in v2. Thanks!

ranjit m.


More information about the dev mailing list