On 10/20/2015 11:51 PM, Stefan Hajnoczi wrote:
On Mon, Oct 19, 2015 at 08:54:14AM +0800, Xiao Guangrong wrote:
+exit:
+ /* Write our output result to dsm memory. */
+ ((dsm_out *)dsm_ram_addr)->len = out->len;
Missing byteswap?
I thought you were going to remove this field because it wasn't needed
by the guest.
The @len is the size of _DSM result buffer, for example, for the function of
DSM_FUN_IMPLEMENTED the result buffer is 8 bytes, and for
DSM_DEV_FUN_NAMESPACE_LABEL_SIZE the buffer size is 4 bytes. It tells ASL code
how much size of memory we need to return to the _DSM caller.
In _DSM code, it's handled like this:
"RLEN" is @len, “OBUF” is the left memory in DSM page.
/* get @len*/
aml_append(method, aml_store(aml_name("RLEN"), aml_local(6)));
/* @len << 3 to get bits. */
aml_append(method, aml_store(aml_shiftleft(aml_local(6),
aml_int(3)), aml_local(6)));
/* get @len << 3 bits from OBUF, and return it to the caller. */
aml_append(method, aml_create_field(aml_name("ODAT"), aml_int(0),
aml_local(6) , "OBUF"));
Since @len is our internally used, it's not return to guest, so i did not do
byteswap here.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html