From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759503AbdKPJ2t (ORCPT ); Thu, 16 Nov 2017 04:28:49 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:45046 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758985AbdKPJ2o (ORCPT ); Thu, 16 Nov 2017 04:28:44 -0500 Date: Thu, 16 Nov 2017 10:28:42 +0100 (CET) From: Thomas Gleixner To: Jarkko Sakkinen cc: platform-driver-x86@vger.kernel.org, LKML Subject: Re: [PATCH v5 07/11] intel_sgx: ptrace() support In-Reply-To: <20171113194528.28557-8-jarkko.sakkinen@linux.intel.com> Message-ID: References: <20171113194528.28557-1-jarkko.sakkinen@linux.intel.com> <20171113194528.28557-8-jarkko.sakkinen@linux.intel.com> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 13 Nov 2017, Jarkko Sakkinen wrote: > Implemented VMA callbacks in order to ptrace() debug enclaves. The amount of information in this changelog is really overwhelming. Please explain WHY you need that and HOW its supposed to work. > +static inline int sgx_vma_access_word(struct sgx_encl *encl, > + unsigned long addr, > + void *buf, > + int len, > + int write, > + struct sgx_encl_page *encl_page, > + int i) Can you find a way to waste more lines for a function declaration? Aside of that using 'i' as a argument is just broken. Arguments should be self explaining as far as possible and sure not using names which are commonly used in code for iterators etc. > +{ > + char data[sizeof(unsigned long)]; > + int align, cnt, offset; > + void *vaddr; > + int ret; > + > + offset = ((addr + i) & (PAGE_SIZE - 1)) & ~(sizeof(unsigned long) - 1); > + align = (addr + i) & (sizeof(unsigned long) - 1); The kernel has macros for this kind of operations. > + cnt = sizeof(unsigned long) - align; > + cnt = min(cnt, len - i); > + > + if (write) { > + if (encl_page->flags & SGX_ENCL_PAGE_TCS && > + (offset < 8 || (offset + (len - i)) > 16)) Hard coded numbers which are nowhere explained are a nono. Please use proper defines and explain the meaning so the code becomes understandable. > + return -ECANCELED; > + > + if (align || (cnt != sizeof(unsigned long))) { What the heck is this doing? The complete lack of any comment in this code makes review impossible. > + vaddr = sgx_get_page(encl_page->epc_page); > + ret = __edbgrd((void *)((unsigned long)vaddr + offset), > + (unsigned long *)data); This typecast mess all over the place is just wrong. You either use the wrong variable types or your functions have the wrong parameter type. Thanks, tglx