Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1591294

Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE

From Christian Borntraeger <borntraeger@de.ibm.com>
Newsgroups linux.kernel
Subject Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE
Date 2017-03-02 18:00 +0100
Message-ID <tgCf8-56J-47@gated-at.bofh.it> (permalink)
References <tgCf7-56J-7@gated-at.bofh.it> <tgCf7-56J-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 03/02/2017 05:38 PM, Arnd Bergmann wrote:
> When CONFIG_KASAN is enabled, the READ_ONCE/WRITE_ONCE macros cause
> rather large kernel stacks, e.g.:
> 
> mm/vmscan.c: In function 'shrink_page_list':
> mm/vmscan.c:1333:1: error: the frame size of 3456 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> block/cfq-iosched.c: In function 'cfqg_stats_add_aux':
> block/cfq-iosched.c:750:1: error: the frame size of 4048 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> fs/btrfs/disk-io.c: In function 'open_ctree':
> fs/btrfs/disk-io.c:3314:1: error: the frame size of 3136 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> fs/btrfs/relocation.c: In function 'build_backref_tree':
> fs/btrfs/relocation.c:1193:1: error: the frame size of 4336 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> fs/fscache/stats.c: In function 'fscache_stats_show':
> fs/fscache/stats.c:287:1: error: the frame size of 6512 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> fs/jbd2/commit.c: In function 'jbd2_journal_commit_transaction':
> fs/jbd2/commit.c:1139:1: error: the frame size of 3760 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
> 
> This attempts a rewrite of the two macros, using a simpler implementation
> for the most common case of having a naturally aligned 1, 2, 4, or (on
> 64-bit architectures) 8  byte object that can be accessed with a single
> instruction.  For these, we go back to a volatile pointer dereference
> that we had with the ACCESS_ONCE macro.

We had changed that back then because gcc 4.6 and 4.7 had a bug that could
removed the volatile statement on aggregate types like the following one

union ipte_control {
        unsigned long val;
        struct {
                unsigned long k  : 1;
                unsigned long kh : 31;
                unsigned long kg : 32;
        };
};

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145

If I see that right, your __ALIGNED_WORD(x)
macro would say that for above structure  sizeof(x) == sizeof(long)) is true,
so it would fall back to the old volatile cast and might reintroduce the 
old compiler bug?

Could you maybe you fence your simple macro for anything older than 4.9? After
all there was no kasan support anyway on these older gcc version.

Christian

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Arnd Bergmann <arnd@arndb.de> - 2017-03-02 18:00 +0100
  Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Christian Borntraeger <borntraeger@de.ibm.com> - 2017-03-02 18:00 +0100
    Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Arnd Bergmann <arnd@arndb.de> - 2017-03-02 19:00 +0100
      Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Arnd Bergmann <arnd@arndb.de> - 2017-03-02 22:50 +0100
        Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Arnd Bergmann <arnd@arndb.de> - 2017-03-03 14:40 +0100
        Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Christian Borntraeger <borntraeger@de.ibm.com> - 2017-03-03 14:40 +0100
          Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Peter Zijlstra <peterz@infradead.org> - 2017-03-03 18:00 +0100
            Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Peter Zijlstra <peterz@infradead.org> - 2017-03-03 18:30 +0100
      Re: [PATCH 02/26] rewrite READ_ONCE/WRITE_ONCE Christian Borntraeger <borntraeger@de.ibm.com> - 2017-03-03 04:20 +0100

csiph-web