Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751337AbdIEK6q (ORCPT ); Tue, 5 Sep 2017 06:58:46 -0400 Received: from LGEAMRELO13.lge.com ([156.147.23.53]:38858 "EHLO lgeamrelo13.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751236AbdIEK6p (ORCPT ); Tue, 5 Sep 2017 06:58:45 -0400 X-Original-SENDERIP: 156.147.1.151 X-Original-MAILFROM: byungchul.park@lge.com X-Original-SENDERIP: 10.177.222.33 X-Original-MAILFROM: byungchul.park@lge.com Date: Tue, 5 Sep 2017 19:58:38 +0900 From: Byungchul Park To: Peter Zijlstra Cc: Byungchul Park , Ingo Molnar , Tejun Heo , Boqun Feng , david@fromorbit.com, Johannes Berg , oleg@redhat.com, "linux-kernel@vger.kernel.org" , kernel-team@lge.com Subject: Re: [PATCH 4/4] lockdep: Fix workqueue crossrelease annotation Message-ID: <20170905105838.GX3240@X58A-UD3R> References: <20170901163852.ckslrgldsalqmg3c@hirez.programming.kicks-ass.net> <20170904013031.GM3240@X58A-UD3R> <20170904114248.kls4jv2ggsv46mli@hirez.programming.kicks-ass.net> <20170905003844.GO3240@X58A-UD3R> <20170905070825.tovfkqvxpwosh5oa@hirez.programming.kicks-ass.net> <20170905071930.h6t2f4guvmswibnv@hirez.programming.kicks-ass.net> <20170905085727.GV3240@X58A-UD3R> <20170905093624.zlwhvg32ahkpnamk@hirez.programming.kicks-ass.net> <20170905103144.GW3240@X58A-UD3R> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170905103144.GW3240@X58A-UD3R> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1156 Lines: 31 On Tue, Sep 05, 2017 at 07:31:44PM +0900, Byungchul Park wrote: > Recursive-read and the hint I proposed(a.k.a. might) should be used for > their different specific applications. Both meaning and constraints of > them are totally different. > > Using a right function semantically is more important than making it > just work, as you know. Wrong? For example, _semantically_: lock(A) -> recursive-read(A), end in a deadlock, while lock(A) -> might(A) , is like nothing. recursive-read(A) -> might(A), is like nothing, while might(A) -> recursive-read(A), end in a deadlock. And so on... Of course, in the following cases, the results are same: recursive-read(A) -> recursive-read(A), is like nothing, and also might(A) -> might(A) , is like nothing. recursive-read(A) -> lock(A), end in a deadlock, and also might(A) -> lock(A), end in a deadlock. Futhermore, recursive-read-might() can be used if needed, since their semantics are orthogonal so they can be used in mixed forms. I really hope you accept the new semantics... I think current workqueue code exactly needs the semantics.