tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Patch: passive serialization



Andrew Doran <ad%netbsd.org@localhost> wrote:
> This patch implements an algorithm similar to read-copy-update *. It is
> covered by the lapsed US patent 4809168 ** and is a good technique for
> making some table or lookup-type operations lockless. See ras_lookup()
> for a good application.
> 
>       http://www.netbsd.org/~ad/cleanout/psync.diff
>       http://www.google.com/patents?id=E14WAAAAEBAJ&dq=4809168
> 

This is really cool!

I just wonder if there are ways to validate that it is really patent-free.

> Notes:
> 
> - I belive that I have accurately implemented the algorithm described in
>   the patent.

What is the main difference between passive serialization and "traditional"
RCU algorithm? It would probably be good to add some comments that/how code
should _not_ diverge, as that might cause violations.

> - Readers must do this, and must not block while in the critical section:
> 
>       kpreempt_disable();
>       /* do lookup operation */
>       kpreempt_enable();
> 
> - Writers do:
> 
>       mutex_enter(&update_lock);
>       /* make updates, install new data items for readers. */
>       /* publish the updates. */
>       xc_sync(&sync_ojbect);
>       /* now safe to destroy any old data items. */
>       mutex_exit(&update_lock);
> 

You probably also meant that readers should no longer use any references
to the data after enable? How about putting these under, for example,
crit_reader_enter(), crit_writer_enter(), etc interface?

> - It could be modified to use synchronization points other than context
>   switch. For example, a low-priority soft interrupt on all CPUs, triggered
>   via IPI. In that case the reader would do 'splsoftclock()+splx()'. The
>   patent would have to be inspected to see if this is covered.

Any benefits using this? That would need a support for XC_HIGHPRI, that is,
MI IPI interface, right?

-- 
Best regards,
Mindaugas


Home | Main Index | Thread Index | Old Index