* [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga
@ 2013-03-14 15:05 Lei Li
2013-03-14 15:05 ` [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time Lei Li
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Lei Li @ 2013-03-14 15:05 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mdroth, Lei Li
This patch series attempts to add Windows implementation
for qemu-ga commands guest-get-time and guest-set-time.
The previous thread about the interfaces introduced and
the POSIX-specific command implementation has already
been accepted, the reference link:
http://article.gmane.org/gmane.comp.emulators.qemu/198472
Notes:
Now It was tested on Windows XP SP3 and Windows 7.
Please comment!
Thanks.
Changes since v5:
- Fix the error check for GetSystemTime() from Michael.
- Other fixups from Michael.
Changes since v4:
- Error handel improvement from Michael.
- Do the math explicitly for the time convert of FILETIME
suggested by Michael.
Changes since v3:
- Reorder the acquire_privilege to avoid a possible
leak of privileges suggested by Eric.
Changes since v2:
- Overflow check improvement for time_ns from Eric.
Changes since v1:
- Make the macro for the offset between windows baseline
and Unix Epoch more readable from Eric.
- Overflow check for filetime pointed by Eric.
Lei Li (2):
qga: add windows implementation for guest-get-time
qga: add windows implementation for guest-set-time
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time
2013-03-14 15:05 [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga Lei Li
@ 2013-03-14 15:05 ` Lei Li
2013-03-14 21:36 ` mdroth
2013-03-14 15:05 ` [Qemu-devel] [PATCH 2/2] qga: add windows implementation for guest-set-time Lei Li
2013-03-14 21:41 ` [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga mdroth
2 siblings, 1 reply; 6+ messages in thread
From: Lei Li @ 2013-03-14 15:05 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mdroth, Lei Li
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
qga/commands-win32.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 7e8ecb3..b395bd5 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -22,6 +22,12 @@
#define SHTDN_REASON_FLAG_PLANNED 0x80000000
#endif
+/* multiple of 100 nanoseconds elapsed between windows baseline
+ (1/1/1601) and Unix Epoch (1/1/1970), accounting for leap years */
+#define W32_FT_OFFSET (10000000ULL * 60 * 60 * 24 * \
+ (365 * (1970 - 1601) + \
+ (1970 - 1601) / 4 - 3))
+
static void acquire_privilege(const char *name, Error **err)
{
HANDLE token;
@@ -108,6 +114,29 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **err)
}
}
+int64_t qmp_guest_get_time(Error **errp)
+{
+ SYSTEMTIME ts = {0};
+ int64_t time_ns;
+ FILETIME tf;
+
+ GetSystemTime(&ts);
+ if (ts.wYear < 1601 || ts.wYear > 30827) {
+ error_setg(errp, "Failed to get time");
+ return -1;
+ }
+
+ if (!SystemTimeToFileTime(&ts, &tf)) {
+ error_setg_errno(errp, errno, "Failed to convert system time");
+ return -1;
+ }
+
+ time_ns = ((((int64_t)tf.dwHighDateTime << 32) | tf.dwLowDateTime)
+ - W32_FT_OFFSET) * 100;
+
+ return time_ns;
+}
+
int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode, Error **err)
{
error_set(err, QERR_UNSUPPORTED);
--
1.7.11.7
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 2/2] qga: add windows implementation for guest-set-time
2013-03-14 15:05 [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga Lei Li
2013-03-14 15:05 ` [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time Lei Li
@ 2013-03-14 15:05 ` Lei Li
2013-03-14 21:41 ` [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga mdroth
2 siblings, 0 replies; 6+ messages in thread
From: Lei Li @ 2013-03-14 15:05 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mdroth, Lei Li
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
qga/commands-win32.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index b395bd5..cc8d890 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -137,6 +137,38 @@ int64_t qmp_guest_get_time(Error **errp)
return time_ns;
}
+void qmp_guest_set_time(int64_t time_ns, Error **errp)
+{
+ SYSTEMTIME ts;
+ FILETIME tf;
+ LONGLONG time;
+
+ if (time_ns < 0 || time_ns / 100 > INT64_MAX - W32_FT_OFFSET) {
+ error_setg(errp, "Time %" PRId64 "is invalid", time_ns);
+ return;
+ }
+
+ time = time_ns / 100 + W32_FT_OFFSET;
+
+ tf.dwLowDateTime = (DWORD) time;
+ tf.dwHighDateTime = (DWORD) (time >> 32);
+
+ if (!FileTimeToSystemTime(&tf, &ts)) {
+ error_setg(errp, "Failed to convert system time");
+ return;
+ }
+
+ acquire_privilege(SE_SYSTEMTIME_NAME, errp);
+ if (error_is_set(errp)) {
+ return;
+ }
+
+ if (!SetSystemTime(&ts)) {
+ error_setg(errp, "Failed to set time to guest: %d", (int)GetLastError());
+ return;
+ }
+}
+
int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode, Error **err)
{
error_set(err, QERR_UNSUPPORTED);
--
1.7.11.7
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time
2013-03-14 15:05 ` [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time Lei Li
@ 2013-03-14 21:36 ` mdroth
0 siblings, 0 replies; 6+ messages in thread
From: mdroth @ 2013-03-14 21:36 UTC (permalink / raw)
To: Lei Li; +Cc: aliguori, qemu-devel
On Thu, Mar 14, 2013 at 11:05:52PM +0800, Lei Li wrote:
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
> ---
> qga/commands-win32.c | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 7e8ecb3..b395bd5 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -22,6 +22,12 @@
> #define SHTDN_REASON_FLAG_PLANNED 0x80000000
> #endif
>
> +/* multiple of 100 nanoseconds elapsed between windows baseline
> + (1/1/1601) and Unix Epoch (1/1/1970), accounting for leap years */
> +#define W32_FT_OFFSET (10000000ULL * 60 * 60 * 24 * \
> + (365 * (1970 - 1601) + \
> + (1970 - 1601) / 4 - 3))
> +
> static void acquire_privilege(const char *name, Error **err)
> {
> HANDLE token;
> @@ -108,6 +114,29 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **err)
> }
> }
>
> +int64_t qmp_guest_get_time(Error **errp)
> +{
> + SYSTEMTIME ts = {0};
> + int64_t time_ns;
> + FILETIME tf;
> +
> + GetSystemTime(&ts);
> + if (ts.wYear < 1601 || ts.wYear > 30827) {
> + error_setg(errp, "Failed to get time");
> + return -1;
> + }
> +
> + if (!SystemTimeToFileTime(&ts, &tf)) {
> + error_setg_errno(errp, errno, "Failed to convert system time");
I missed this is well, SystemTimeToFileTime() doesn't set errno, but if
this is the only change needed I can fix this up in my tree.
> + return -1;
> + }
> +
> + time_ns = ((((int64_t)tf.dwHighDateTime << 32) | tf.dwLowDateTime)
> + - W32_FT_OFFSET) * 100;
> +
> + return time_ns;
> +}
> +
> int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode, Error **err)
> {
> error_set(err, QERR_UNSUPPORTED);
> --
> 1.7.11.7
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga
2013-03-14 15:05 [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga Lei Li
2013-03-14 15:05 ` [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time Lei Li
2013-03-14 15:05 ` [Qemu-devel] [PATCH 2/2] qga: add windows implementation for guest-set-time Lei Li
@ 2013-03-14 21:41 ` mdroth
2013-03-15 3:04 ` Lei Li
2 siblings, 1 reply; 6+ messages in thread
From: mdroth @ 2013-03-14 21:41 UTC (permalink / raw)
To: Lei Li; +Cc: aliguori, qemu-devel
On Thu, Mar 14, 2013 at 11:05:51PM +0800, Lei Li wrote:
> This patch series attempts to add Windows implementation
> for qemu-ga commands guest-get-time and guest-set-time.
>
> The previous thread about the interfaces introduced and
> the POSIX-specific command implementation has already
> been accepted, the reference link:
>
> http://article.gmane.org/gmane.comp.emulators.qemu/198472
>
> Notes:
> Now It was tested on Windows XP SP3 and Windows 7.
> Please comment!
Series looks good other than comment in patch 1. I can fix this in tree
or you can send another version.
Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
>
> Thanks.
>
> Changes since v5:
> - Fix the error check for GetSystemTime() from Michael.
> - Other fixups from Michael.
>
> Changes since v4:
> - Error handel improvement from Michael.
> - Do the math explicitly for the time convert of FILETIME
> suggested by Michael.
>
> Changes since v3:
> - Reorder the acquire_privilege to avoid a possible
> leak of privileges suggested by Eric.
>
> Changes since v2:
> - Overflow check improvement for time_ns from Eric.
>
> Changes since v1:
> - Make the macro for the offset between windows baseline
> and Unix Epoch more readable from Eric.
> - Overflow check for filetime pointed by Eric.
>
> Lei Li (2):
> qga: add windows implementation for guest-get-time
> qga: add windows implementation for guest-set-time
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga
2013-03-14 21:41 ` [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga mdroth
@ 2013-03-15 3:04 ` Lei Li
0 siblings, 0 replies; 6+ messages in thread
From: Lei Li @ 2013-03-15 3:04 UTC (permalink / raw)
To: mdroth; +Cc: aliguori, qemu-devel
On 03/15/2013 05:41 AM, mdroth wrote:
> On Thu, Mar 14, 2013 at 11:05:51PM +0800, Lei Li wrote:
>> This patch series attempts to add Windows implementation
>> for qemu-ga commands guest-get-time and guest-set-time.
>>
>> The previous thread about the interfaces introduced and
>> the POSIX-specific command implementation has already
>> been accepted, the reference link:
>>
>> http://article.gmane.org/gmane.comp.emulators.qemu/198472
>>
>> Notes:
>> Now It was tested on Windows XP SP3 and Windows 7.
>> Please comment!
> Series looks good other than comment in patch 1. I can fix this in tree
> or you can send another version.
I am very sorry for this, I should check the rest of it... :-(
Sure, I will submit new version with this fixed.
Thanks for your time!
>
> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
>
>> Thanks.
>>
>> Changes since v5:
>> - Fix the error check for GetSystemTime() from Michael.
>> - Other fixups from Michael.
>>
>> Changes since v4:
>> - Error handel improvement from Michael.
>> - Do the math explicitly for the time convert of FILETIME
>> suggested by Michael.
>>
>> Changes since v3:
>> - Reorder the acquire_privilege to avoid a possible
>> leak of privileges suggested by Eric.
>>
>> Changes since v2:
>> - Overflow check improvement for time_ns from Eric.
>>
>> Changes since v1:
>> - Make the macro for the offset between windows baseline
>> and Unix Epoch more readable from Eric.
>> - Overflow check for filetime pointed by Eric.
>>
>> Lei Li (2):
>> qga: add windows implementation for guest-get-time
>> qga: add windows implementation for guest-set-time
>>
--
Lei
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-03-15 3:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-14 15:05 [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga Lei Li
2013-03-14 15:05 ` [Qemu-devel] [PATCH 1/2] qga: add windows implementation for guest-get-time Lei Li
2013-03-14 21:36 ` mdroth
2013-03-14 15:05 ` [Qemu-devel] [PATCH 2/2] qga: add windows implementation for guest-set-time Lei Li
2013-03-14 21:41 ` [Qemu-devel] [PATCH 0/2 v6] Add Windows support for time resync by qemu-ga mdroth
2013-03-15 3:04 ` Lei Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).