|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH 0/3] xen/spinlock: make recursive spinlocks a dedicated type
On 14.12.2022 17:36, Juergen Gross wrote:
> On 14.12.22 17:25, Daniel P. Smith wrote:
>> On 12/14/22 10:31, Juergen Gross wrote:
>>> On 14.12.22 16:03, Daniel P. Smith wrote:
>>>>
>>>> On 9/10/22 11:49, Juergen Gross wrote:
>>>>> Instead of being able to use normal spinlocks as recursive ones, too,
>>>>> make recursive spinlocks a special lock type.
>>>>>
>>>>> This will make the spinlock structure smaller in production builds and
>>>>> add type-safety.
>>>>
>>>> Just a little yak shaving, IMHO a spinlock is normally not expected to be
>>>> recursive. Thus explicitly naming a spinlock as non-recursive I find to be
>>>> redundant along with being expensive for typing. Whereas a recursive
>>>> spinlock
>>>> is the special instance and should have a declarative distinction. Only
>>>> codifying the recursive type would significantly cut down on the size of
>>>> the
>>>> series and still provide equal type and visual clarification.
>>>
>>> A "normal" spinlock is non-recursive.
>>>
>>> A recursive spinlock in Xen can be either taken recursive, or it can be
>>> taken
>>> non-recursive, causing further recursive attempts to spin.
>>
>> Yes, I understand the current situation.
>>
>>> So the explicit non-recursive locking applies to that special treatment of
>>> recursive spinlocks.
>>
>> I understand this, but to help clarify what I am saying is that individuals
>> coming from outside Xen would expect is the spinlock family of calls to
>> behave
>> as a non-recursive spinlocks and recursive spinlock family of calls would
>> provide the recursive behavior. Currently Xen's behavior is backwards to
>> this,
>> which this series continues and is a valid approach. Here spinlock and
>> recursive
>> spinlock family of calls are recursive and must use non-recursive spinlock
>> family to have "normal" spinlock behavior. IMHO it would greatly simplify
>> the
>
> My series doesn't change treatment of normal spinlocks. They are still used
> via
> spin_{lock,locked,unlock}.
>
>> code and align with the "normal" understanding of spinlocks if instead
>> spin_{lock,locked,unlock} macros were the non-recursive calls and
>> spin_{lock,locked,unlock}_recursive macros were the recursive calls. Then
>> there
>> would only be two suites of calls for spinlocks and a lot less keystrokes
>> for
>> need for most development.
>
> Only the recursive spinlock type user must specify, whether a lock is meant to
> be handled as a recursive or a non-recursive lock attempt. This is similar to
> a rwlock, where the user must specify whether to lock as a reader or a writer.
While I can't come up with anything neat right away, it feels like it should be
possible to come up with some trickery to make spin_lock() usable on both lock
types, eliminating the need to ..._nonrecursive() variants visible at use sites
(they may still be necessary as helpers then). At least if a spinlock_t instance
wasn't embedded in the recursive lock struct (as I did suggest), then something
along the lines of what tgmath.h does may be possible.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |