Skip to contentSkip to conversation

Export clocks_calc_mult_shift() function

DISCUSSION Murali Karicheri 2 participants 8 messages Mar 8, 2016 – Mar 31, 2016

lore
Share & tools
lore
#0 lore raw

Hi,

I found a patch posted sometime back to export the clocksource function clocks_calc_mult_shift() so that it can be called by drivers that are dynamically loadable. I have not seen any comment against this. Wondering why this is not merged. We require this function exported for use in our driver as well. Can you merge the patch please. Or do you suggest me to repost the same?

http://lkml.iu.edu/hypermail/linux/kernel/1502.2/01641.html

Thanks

Signature · 2 lines
Murali Karicheri
Linux Kernel, Keystone
#1 lore raw
Quoted 8 lines · Murali Karicheri

Hi,

I found a patch posted sometime back to export the clocksource function clocks_calc_mult_shift() so that it can be called by drivers that are dynamically loadable. I have not seen any comment against this. Wondering why this is not merged. We require this function exported for use in our driver as well. Can you merge the patch please. Or do you suggest me to repost the same?

Why would the clocksource driver need to calculate the hz/shift value instead of using the clocksource_register_hz/khz functions?

thanks
-john

#2 lore raw
In reply to Murali Karicheri
Quoted 9 lines · Murali Karicheri

Hi,

I found a patch posted sometime back to export the clocksource function clocks_calc_mult_shift() so that it can be called by drivers that are dynamically loadable. I have not seen any comment against this. Wondering why this is not merged. We require this function exported for use in our driver as well. Can you merge the patch please. Or do you suggest me to repost the same?

Quoted 4 lines

http://lkml.iu.edu/hypermail/linux/kernel/1502.2/01641.html

Thanks

John,

Some reason, your response didn't make into my inbox. So I am reproducing it below.

Quoted 5 lines

Why would the clocksource driver need to calculate the hz/shift value instead of using the clocksource_register_hz/khz functions?

thanks
-john

John,

In this use case, the timestamp for Tx/Rx is generated by a firmware that attach the timestamp raw count to the packet meta data when the same is received from the Packet Accelerator h/w at the ingress. We need to convert this raw count value to nano second and use a code like this.

/* Convert a raw PA timer count to nanoseconds
*/
static inline u64 tstamp_raw_to_ns(struct pa_core_device *core_dev, u32 lo,

                                   u32 hi)
{
        u32 mult = core_dev->timestamp_info.mult;
        u32 shift = core_dev->timestamp_info.shift;
        u64 result;

        /* Minimize overflow errors by doing this in pieces */
        result  = ((u64)lo * mult) >> shift;
        result += ((u64)hi << (32 - shift)) * mult;

        return result;
}

The mult, shift values are obtained using the existing clocks_calc_mult_shift() that will not work, if our driver is built as a dynamically loadable module as the symbol is not exported.

Is there an alternative way of doing this without exporting this function. clocksource_register_hz/khz() can't help in this, right?

Signature · 2 lines
Murali Karicheri
Linux Kernel, Keystone
#3 lore raw
Quoted 49 lines · Murali Karicheri
Quoted 9 lines · Murali Karicheri

Hi,

I found a patch posted sometime back to export the clocksource function clocks_calc_mult_shift() so that it can be called by drivers that are dynamically loadable. I have not seen any comment against this. Wondering why this is not merged. We require this function exported for use in our driver as well. Can you merge the patch please. Or do you suggest me to repost the same?

Quoted 4 lines

http://lkml.iu.edu/hypermail/linux/kernel/1502.2/01641.html

Thanks

John,

Some reason, your response didn't make into my inbox. So I am reproducing it below.

Quoted 5 lines

Why would the clocksource driver need to calculate the hz/shift value instead of using the clocksource_register_hz/khz functions?

thanks
-john

John,

In this use case, the timestamp for Tx/Rx is generated by a firmware that attach the timestamp raw count to the packet meta data when the same is received from the Packet Accelerator h/w at the ingress. We need to convert this raw count value to nano second and use a code like this.

/* Convert a raw PA timer count to nanoseconds
*/
static inline u64 tstamp_raw_to_ns(struct pa_core_device *core_dev, u32 lo,

                                   u32 hi)
{
        u32 mult = core_dev->timestamp_info.mult;
        u32 shift = core_dev->timestamp_info.shift;
        u64 result;

        /* Minimize overflow errors by doing this in pieces */
        result  = ((u64)lo * mult) >> shift;
        result += ((u64)hi << (32 - shift)) * mult;

        return result;
}
Quoted 7 lines

The mult, shift values are obtained using the existing clocks_calc_mult_shift() that will not work, if our driver is built as a dynamically loadable module as the symbol is not exported.

Is there an alternative way of doing this without exporting this function. clocksource_register_hz/khz() can't help in this, right?

John,

I didn't see any response? Can I send a patch to export clocks_calc_mult_shift() function??

Signature · 2 lines
Murali Karicheri
Linux Kernel, Keystone
#4 lore raw
Quoted 54 lines · Murali Karicheri
Quoted 53 lines · Murali Karicheri
Quoted 9 lines · Murali Karicheri

Hi,

I found a patch posted sometime back to export the clocksource function clocks_calc_mult_shift() so that it can be called by drivers that are dynamically loadable. I have not seen any comment against this. Wondering why this is not merged. We require this function exported for use in our driver as well. Can you merge the patch please. Or do you suggest me to repost the same?

Quoted 4 lines

http://lkml.iu.edu/hypermail/linux/kernel/1502.2/01641.html

Thanks

John,

Some reason, your response didn't make into my inbox. So I am reproducing it below.

Quoted 5 lines

Why would the clocksource driver need to calculate the hz/shift value instead of using the clocksource_register_hz/khz functions?

thanks
-john

John,

In this use case, the timestamp for Tx/Rx is generated by a firmware that attach the timestamp raw count to the packet meta data when the same is received from the Packet Accelerator h/w at the ingress. We need to convert this raw count value to nano second and use a code like this.

/* Convert a raw PA timer count to nanoseconds
*/
static inline u64 tstamp_raw_to_ns(struct pa_core_device *core_dev, u32 lo,

                                   u32 hi)
{
        u32 mult = core_dev->timestamp_info.mult;
        u32 shift = core_dev->timestamp_info.shift;
        u64 result;

        /* Minimize overflow errors by doing this in pieces */
        result  = ((u64)lo * mult) >> shift;
        result += ((u64)hi << (32 - shift)) * mult;

        return result;
}

The mult, shift values are obtained using the existing clocks_calc_mult_shift() that will not work, if our driver is built as a dynamically loadable module as the symbol is not exported.

Quoted 6 lines
Quoted 3 lines

Is there an alternative way of doing this without exporting this function. clocksource_register_hz/khz() can't help in this, right?

John,

I didn't see any response? Can I send a patch to export clocks_calc_mult_shift() function??

Sorry. I was out at a conference when you first sent this out and then I just now got back from vacation.

I didn't realize this was for the

So I'm still hesitant to export that function because its a bit too raw and I'm not sure drivers should be trusted to handle the inherent tradeoffs it makes (adjustability and accuracy vs counter delta limits to avoid mult overflow) properly without much guidance.

Could you instead export a helper function like what clocksource_register_hz/khz() provides? So the timecounter drivers get usable values w/o having to sort out the interval length (as it probably would just be blindly copy-pasted in from somewhere else).

thanks
-john

#5 lore raw
Quoted 8 lines · John Stultz
Quoted 1 line · Murali Karicheri

I didn't see any response? Can I send a patch to export clocks_calc_mult_shift() function??

Sorry. I was out at a conference when you first sent this out and then I just now got back from vacation.

I didn't realize this was for the

Heh. Maybe I'm not all the way back from vacation yet.

I was going to say.... I didn't realize this was for the timecounter structures. And yes, in that case we don't have a easy helper to calculate the mult/shift pair.

thanks
-john

#6 lore raw
Quoted 7 lines · John Stultz
Quoted 6 lines · John Stultz
Quoted 1 line · Murali Karicheri

I didn't see any response? Can I send a patch to export clocks_calc_mult_shift() function??

Sorry. I was out at a conference when you first sent this out and then I just now got back from vacation.

Quoted 8 lines
Quoted 2 lines

I didn't realize this was for the

Heh. Maybe I'm not all the way back from vacation yet.

I was going to say.... I didn't realize this was for the timecounter structures. And yes, in that case we don't have a easy helper to calculate the mult/shift pair.

John,

So does that mean a green signal for me to send a patch for exporting this?

Thanks

Murali

Quoted 4 lines

thanks
-john

Signature · 2 lines
Murali Karicheri
Linux Kernel, Keystone
#7 lore raw
Quoted 11 lines · Murali Karicheri
Quoted 10 lines · John Stultz
Quoted 8 lines · John Stultz
Quoted 1 line · Murali Karicheri

I didn't see any response? Can I send a patch to export clocks_calc_mult_shift() function??

Sorry. I was out at a conference when you first sent this out and then I just now got back from vacation.

I didn't realize this was for the

Quoted 8 lines
Quoted 5 lines

Heh. Maybe I'm not all the way back from vacation yet.

I was going to say.... I didn't realize this was for the timecounter structures. And yes, in that case we don't have a easy helper to calculate the mult/shift pair.

John,

So does that mean a green signal for me to send a patch for exporting this?

As I said in the previous mail, I'd prefer you export a helper function that avoids having the driver select the interval range, and instead picks a proper value for a given freq. But yea, I understand we need something here.

thanks
-john