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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to