diff mbox

[v3,8/9] bt: remove muldiv64()

Message ID 1440703987-29012-9-git-send-email-lvivier@redhat.com
State New
Headers show

Commit Message

Laurent Vivier Aug. 27, 2015, 7:33 p.m. UTC
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(-)

Comments

Laurent Vivier Sept. 8, 2015, 12:55 p.m. UTC | #1
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;
>
Paolo Bonzini Sept. 8, 2015, 12:57 p.m. UTC | #2
> 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 mbox

Patch

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;