Message ID | 1440703987-29012-9-git-send-email-lvivier@redhat.com |
---|---|
State | New |
Headers | show |
ping ? On 27/08/2015 21:33, Laurent Vivier wrote: > Originally, timers were ticks based, and it made sense to > add ticks to current time to know when to trigger an alarm. > > But since commit: > > 7447545 change all other clock references to use nanosecond resolution accessors > > All timers use nanoseconds and we need to convert ticks to nanoseconds. > > As get_ticks_per_sec() is 10^9, > > a = muldiv64(b, get_ticks_per_sec(), 100); > y = muldiv64(x, get_ticks_per_sec(), 1000000); > > can be converted to > > a = b * 10000000; > y = x * 1000; > > Signed-off-by: Laurent Vivier <lvivier@redhat.com> > --- > hw/bt/hci.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/bt/hci.c b/hw/bt/hci.c > index 7ea3dc6..585ee2e 100644 > --- a/hw/bt/hci.c > +++ b/hw/bt/hci.c > @@ -595,7 +595,7 @@ static void bt_hci_inquiry_result(struct bt_hci_s *hci, > static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period) > { > timer_mod(timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > - muldiv64(period << 7, get_ticks_per_sec(), 100)); > + (uint64_t)(period << 7) * 10000000); > } > > static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length) > @@ -1099,7 +1099,7 @@ static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle, > bt_hci_event_status(hci, HCI_SUCCESS); > > timer_mod(link->acl_mode_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > - muldiv64(interval * 625, get_ticks_per_sec(), 1000000)); > + ((uint64_t)interval * 625) * 1000); > bt_hci_lmp_mode_change_master(hci, link->link, mode, interval); > > return 0; >
> ping ? Not really the most alive part of QEMU. :-) > On 27/08/2015 21:33, Laurent Vivier wrote: > > Originally, timers were ticks based, and it made sense to > > add ticks to current time to know when to trigger an alarm. > > > > But since commit: > > > > 7447545 change all other clock references to use nanosecond resolution > > accessors > > > > All timers use nanoseconds and we need to convert ticks to nanoseconds. > > > > As get_ticks_per_sec() is 10^9, > > > > a = muldiv64(b, get_ticks_per_sec(), 100); > > y = muldiv64(x, get_ticks_per_sec(), 1000000); > > > > can be converted to > > > > a = b * 10000000; > > y = x * 1000; > > > > Signed-off-by: Laurent Vivier <lvivier@redhat.com> > > --- > > hw/bt/hci.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/hw/bt/hci.c b/hw/bt/hci.c > > index 7ea3dc6..585ee2e 100644 > > --- a/hw/bt/hci.c > > +++ b/hw/bt/hci.c > > @@ -595,7 +595,7 @@ static void bt_hci_inquiry_result(struct bt_hci_s *hci, > > static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period) > > { > > timer_mod(timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + > > - muldiv64(period << 7, get_ticks_per_sec(), 100)); > > + (uint64_t)(period << 7) * 10000000); > > } > > > > static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length) > > @@ -1099,7 +1099,7 @@ static int bt_hci_mode_change(struct bt_hci_s *hci, > > uint16_t handle, > > bt_hci_event_status(hci, HCI_SUCCESS); > > > > timer_mod(link->acl_mode_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) > > + > > - muldiv64(interval * 625, get_ticks_per_sec(), > > 1000000)); > > + ((uint64_t)interval * 625) * 1000); > > bt_hci_lmp_mode_change_master(hci, link->link, mode, interval); > > > > return 0; > > > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/hw/bt/hci.c b/hw/bt/hci.c index 7ea3dc6..585ee2e 100644 --- a/hw/bt/hci.c +++ b/hw/bt/hci.c @@ -595,7 +595,7 @@ static void bt_hci_inquiry_result(struct bt_hci_s *hci, static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period) { timer_mod(timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + - muldiv64(period << 7, get_ticks_per_sec(), 100)); + (uint64_t)(period << 7) * 10000000); } static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length) @@ -1099,7 +1099,7 @@ static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle, bt_hci_event_status(hci, HCI_SUCCESS); timer_mod(link->acl_mode_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + - muldiv64(interval * 625, get_ticks_per_sec(), 1000000)); + ((uint64_t)interval * 625) * 1000); bt_hci_lmp_mode_change_master(hci, link->link, mode, interval); return 0;
Originally, timers were ticks based, and it made sense to add ticks to current time to know when to trigger an alarm. But since commit: 7447545 change all other clock references to use nanosecond resolution accessors All timers use nanoseconds and we need to convert ticks to nanoseconds. As get_ticks_per_sec() is 10^9, a = muldiv64(b, get_ticks_per_sec(), 100); y = muldiv64(x, get_ticks_per_sec(), 1000000); can be converted to a = b * 10000000; y = x * 1000; Signed-off-by: Laurent Vivier <lvivier@redhat.com> --- hw/bt/hci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)