svn commit: r222670 - in head/sys/cddl/compat/opensolaris: kern
sys
Martin Matuska
mm at FreeBSD.org
Mon Jun 6 07:39:59 UTC 2011
The quotes don't mean the fix isn't complete - it is complete.
I was just discussing the way we put it in the code and comparing how it
looks like upstream (so if there are any code updates in the future it
should be easier to integrate them).
Btw. pjd is ok with this commit as the vendor code did not get altered
so you may ignore my thoughts.
Cheers,
mm
Dňa 05.06.2011 21:15, Andriy Gapon wrote / napísal(a):
> on 04/06/2011 13:23 Martin Matuska said the following:
>> If we are "fixing" this,
> I am not sure why you used the quotes here. I think that it's a real issue and
> I believe that this commit is a reasonable fix.
>
>> what about following pjd's rules and moving in
>> direction vendor code (reducing diff)? Or is it too expensive?
> Well, it seems that the code before the change was not compliant with the rules.
> I certainly like those rules, but maybe in this case they would be an overkill.
>
>> If that way:
>>
>> a) the nsec_per_tick is defined in vendor code
>> "usr/src/uts/common/conf/param.c".
>>
>> Maybe we should define it at least in
>> sys/cddl/compat/opensolaris/sys/param.h and not in time.h
>>
>> b) sys/cddl/compat/opensolaris/kern/opensolaris_sunddi.c
>> might contain the functions as in vendor code (uts/common/os/sunddi.c):
>>
>> clock_t
>> ddi_get_lbolt(void)
>> {
>> return ((clock_t)lbolt_hybrid());
>> }
>>
>> int64_t
>> ddi_get_lbolt64(void)
>> {
>> return (lbolt_hybrid());
>> }
>>
>> c) sys/cddl/compat/opensolaris/sys/time.h:
>>
>> extern clock_t ddi_get_lbolt(void);
>> extern int64_t ddi_get_lbolt64(void);
>>
>> d) we might want a new file called
>> sys/cddl/compat/opensolaris/kern/opensolaris_clock.c
>> (uts/common/os/clock.c):
>>
>> int64_t
>> lbolt_hybrid(void)
>> {
>> return (gethrtime() / nsec_per_tick);
>> }
>>
>> The d) step with lbolt_hybrid might be omitted and the function result
>> integrated directly into opensolaris_sunddi.c. Bud regardless of that,
>> notice the clock_t cast in ddi_get_lbolt().
>>
>> mm
>>
>> Dňa 04.06.2011 09:02, Andriy Gapon wrote / napísal(a):
>>> Author: avg
>>> Date: Sat Jun 4 07:02:06 2011
>>> New Revision: 222670
>>> URL: http://svn.freebsd.org/changeset/base/222670
>>>
>>> Log:
>>> opensolaris compat / zfs: avoid early overflow in ddi_get_lbolt*
>>>
>>> Reported by: David P. Discher <dpd at bitgravity.com>
>>> Tested by: will
>>> Reviewed by: art
>>> Discussed with: dwhite
>>> MFC after: 2 weeks
>>>
>>> Modified:
>>> head/sys/cddl/compat/opensolaris/kern/opensolaris.c
>>> head/sys/cddl/compat/opensolaris/sys/time.h
>>>
>>> Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris.c
>>> ==============================================================================
>>> --- head/sys/cddl/compat/opensolaris/kern/opensolaris.c Sat Jun 4 04:35:12 2011 (r222669)
>>> +++ head/sys/cddl/compat/opensolaris/kern/opensolaris.c Sat Jun 4 07:02:06 2011 (r222670)
>>> @@ -40,6 +40,7 @@
>>> cpu_core_t cpu_core[MAXCPU];
>>> kmutex_t cpu_lock;
>>> solaris_cpu_t solaris_cpu[MAXCPU];
>>> +int nsec_per_tick;
>>>
>>> /*
>>> * OpenSolaris subsystem initialisation.
>>> @@ -60,6 +61,8 @@ opensolaris_load(void *dummy)
>>> }
>>>
>>> mutex_init(&cpu_lock, "OpenSolaris CPU lock", MUTEX_DEFAULT, NULL);
>>> +
>>> + nsec_per_tick = NANOSEC / hz;
>>> }
>>>
>>> SYSINIT(opensolaris_register, SI_SUB_OPENSOLARIS, SI_ORDER_FIRST, opensolaris_load, NULL);
>>>
>>> Modified: head/sys/cddl/compat/opensolaris/sys/time.h
>>> ==============================================================================
>>> --- head/sys/cddl/compat/opensolaris/sys/time.h Sat Jun 4 04:35:12 2011 (r222669)
>>> +++ head/sys/cddl/compat/opensolaris/sys/time.h Sat Jun 4 07:02:06 2011 (r222670)
>>> @@ -62,8 +62,21 @@ gethrtime(void) {
>>> #define gethrestime(ts) getnanotime(ts)
>>> #define gethrtime_waitfree() gethrtime()
>>>
>>> -#define ddi_get_lbolt() ((gethrtime() * hz) / NANOSEC)
>>> -#define ddi_get_lbolt64() (int64_t)((gethrtime() * hz) / NANOSEC)
>>> +extern int nsec_per_tick; /* nanoseconds per clock tick */
>>> +
>>> +static __inline int64_t
>>> +ddi_get_lbolt64(void)
>>> +{
>>> +
>>> + return (gethrtime() / nsec_per_tick);
>>> +}
>>> +
>>> +static __inline clock_t
>>> +ddi_get_lbolt(void)
>>> +{
>>> +
>>> + return (ddi_get_lbolt64());
>>> +}
>>>
>>> #else
>>>
>
More information about the svn-src-head
mailing list