lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <964d1148-c17b-b9f9-18f7-9178173e3945@oracle.com> Date: Fri, 15 Dec 2017 23:14:31 +0800 From: "jianchao.wang" <jianchao.w.wang@...cle.com> To: Peter Zijlstra <peterz@...radead.org> Cc: Bart Van Assche <Bart.VanAssche@....com>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "linux-block@...r.kernel.org" <linux-block@...r.kernel.org>, "kernel-team@...com" <kernel-team@...com>, "oleg@...hat.com" <oleg@...hat.com>, "hch@....de" <hch@....de>, "axboe@...nel.dk" <axboe@...nel.dk>, "osandov@...com" <osandov@...com>, "tj@...nel.org" <tj@...nel.org> Subject: Re: [PATCH 2/6] blk-mq: replace timeout synchronization with a RCU and generation based scheme On 12/15/2017 03:31 PM, Peter Zijlstra wrote: > On Fri, Dec 15, 2017 at 10:12:50AM +0800, jianchao.wang wrote: >>> That only makes it a little better: >>> >>> Task-A Worker >>> >>> write_seqcount_begin() >>> blk_mq_rw_update_state(rq, IN_FLIGHT) >>> blk_add_timer(rq) >>> <timer> >>> schedule_work() >>> </timer> >>> <context-switch to worker> >>> read_seqcount_begin() >>> while(seq & 1) >>> cpu_relax(); >>> >> Hi Peter >> >> The current seqcount read side is as below: >> do { >> start = read_seqcount_begin(&rq->gstate_seq); > > > static inline unsigned read_seqcount_begin(const seqcount_t *s) > { > seqcount_lockdep_reader_access(s); > return raw_read_seqcount_begin(s); > } > > static inline unsigned raw_read_seqcount_begin(const seqcount_t *s) > { > unsigned ret = __read_seqcount_begin(s); > smp_rmb(); > return ret; > } > > static inline unsigned __read_seqcount_begin(const seqcount_t *s) > { > unsigned ret; > > repeat: > ret = READ_ONCE(s->sequence); > if (unlikely(ret & 1)) { > cpu_relax(); > goto repeat; > } > return ret; > } > Really thanks for kindly pointing out. jianchao
Powered by blists - more mailing lists