From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751469AbdJDKkX (ORCPT ); Wed, 4 Oct 2017 06:40:23 -0400 Received: from mx2.suse.de ([195.135.220.15]:34105 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751114AbdJDKkV (ORCPT ); Wed, 4 Oct 2017 06:40:21 -0400 Date: Wed, 4 Oct 2017 12:40:16 +0200 From: Petr Mladek To: Sergey Senozhatsky Cc: Steven Rostedt , Tony Luck , Fenghua Yu , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , James Bottomley , Helge Deller , Andrew Morton , Jessica Yu , Alexei Starovoitov , linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: Re: [PATCHv3 5/7] parisc64: Add .opd based function descriptor dereference Message-ID: <20171004104016.GG20084@pathway.suse.cz> References: <20170930025319.987-1-sergey.senozhatsky@gmail.com> <20170930025319.987-6-sergey.senozhatsky@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170930025319.987-6-sergey.senozhatsky@gmail.com> 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 On Sat 2017-09-30 11:53:17, Sergey Senozhatsky wrote: > We are moving towards separate kernel and module function descriptor > dereference callbacks. This patch enables it for parisc64. > > For pointers that belong to the kernel > - Added __start_opd and __end_opd pointers, to track the kernel > .opd section address range; > > - Added dereference_kernel_function_descriptor(). Now we > will dereference only function pointers that are within > [__start_opd, __end_opd]; > > For pointers that belong to a module > - Added dereference_module_function_descriptor() to handle module > function descriptor dereference. Now we will dereference only > pointers that are within [module->opd.start, module->opd.end]. > diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c > index f1a76935a314..28f89b3dcc11 100644 > --- a/arch/parisc/kernel/module.c > +++ b/arch/parisc/kernel/module.c > @@ -954,3 +955,19 @@ void module_arch_cleanup(struct module *mod) > { > deregister_unwind_table(mod); > } > + > +#ifdef CONFIG_64BIT > +unsigned long dereference_module_function_descriptor(struct module *mod, > + unsigned long addr) > +{ > + unsigned long start_opd = (Elf64_Addr)mod->core_layout.base + > + mod->arch.fdesc_offset; > + unsigned long end_opd = start_opd + > + mod->arch.fdesc_count * sizeof(Elf64_Fdesc); I know that this is used in rather slow paths. But it still might make sense to have these section borders pre-computed and stored in struct mod_arch_specific. I mean to do similar thing that we do on powerpc. Well, we could do this in a followup patch if parisc people wanted it. > + if (addr < start_opd || addr >= end_opd) > + return addr; > + > + return dereference_function_descriptor(addr); > +} > +#endif Otherwise the patch looks fine to me. Reviewed-by: Petr Mladek Best Regards, Petr