commit | 47263808f5237da331397cd588e91a1ed97405e2 | [log] [tgz] |
---|---|---|
author | Lei YU <mine260309@gmail.com> | Wed Nov 08 17:30:04 2017 +0800 |
committer | Lei YU <mine260309@gmail.com> | Fri Nov 10 21:23:26 2017 +0800 |
tree | 02a6289050e135e779c74b99d4a4c8ec009a0282 | |
parent | 7f25c53fa79f71a12b11593ac7eda23a9b8d3e1a [diff] |
Fix incorrect host time issue switching to SPLIT The time tests find an issue that when owner is set to Split, and then set the BMC time, the host time becomes incorrect. The root cause is that the diff between host time and steady clock is not updated when the owner is changed to Split, and thus when BMC time is changed, the host time is calculated incorrectly. The fix is to re-calculate the diff between host time and steady clock in this case. Resolves openbmc/openbmc#901 Change-Id: Ida22f27c6adba6b1cf8a41274eb5f26b6f1bdab7 Signed-off-by: Lei YU <mine260309@gmail.com>
phosphor-time-manager
is the time manager service that implements D-Bus interface xyz/openbmc_project/Time/EpochTime.interface.yaml
. The user can get or set the BMC's or HOST's time via this interface.
The service xyz.openbmc_project.Time.Manager
provides two objects on D-Bus:
where each object implements interface xyz.openbmc_project.Time.EpochTime
.
The user can directly get or set the property Elapsed
of the objects to get or set the time. For example on an authenticated session:
### With busctl on BMC busctl get-property xyz.openbmc_project.Time.Manager \ /xyz/openbmc_project/time/bmc xyz.openbmc_project.Time.EpochTime Elapsed ### With REST API on remote host curl -b cjar -k https://bmc-ip/xyz/openbmc_project/time/bmc
### With busctl on BMC busctl set-property xyz.openbmc_project.Time.Manager \ /xyz/openbmc_project/time/host xyz.openbmc_project.Time.EpochTime \ Elapsed t <value-in-microseconds> ### With REST API on remote host curl -b cjar -k -H "Content-Type: application/json" -X PUT \ -d '{"data": 1487304700000000}' \ https://bmc-ip/xyz/openbmc_project/time/host/attr/Elapsed
Getting BMC or HOST time is always allowed, but setting the time may not be allowed depending on the below two settings in the settings manager.
A summary of which cases the time can be set on BMC or HOST:
Mode | Owner | Set BMC Time | Set Host Time |
---|---|---|---|
NTP | BMC | Fail to set | Not allowed |
NTP | HOST | Not allowed | Not allowed |
NTP | SPLIT | Fail to set | OK |
NTP | BOTH | Fail to set | Not allowed |
MANUAL | BMC | OK | Not allowed |
MANUAL | HOST | Not allowed | OK |
MANUAL | SPLIT | OK | OK |
MANUAL | BOTH | OK | OK |
When the host is on, the changes of the above time mode/owner are not applied but deferred. The changes of the mode/owner are saved to persistent storage.
When the host is off, the saved mode/owner are read from persistent storage and are applied.
Note: A user can set the time mode and owner in the settings daemon at any time, but the time manager applying them is governed by the above condition.