[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Deadcode discussion based on Arm NS phys timer


  • To: Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Michal Orzel <michal.orzel@xxxxxxx>
  • Date: Mon, 24 Oct 2022 13:41:09 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=xen.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TAsp3WKl3ZQxOWYHdKdVtkrDHaMbbXOFBlB3D9HaMFE=; b=HGDHa9iEcXUmwWiPjW/Qq/XVfZdJnd1nvujbx2gWth+Dqo5Muif9jpJ3wWfQez+B1uQRoSwT86JObPgkrEz6tGSc4tCBuxB4i2ge79DLPgV/G2iqrd92+iMXi3VY3q8y9ckd+8vtfZScD4RCZ8qJKFN8auM0v4mo1bcRJPa5b1MuG0fJMvE174D29terrzDocD/DMAB6qcGY7haOiNIVUF1IKy/ZB+GPyj+wBqQ4joWw6maUwzlx3BhAa9GpkKHR4ApNipabPzdAvzuZgX+uRG0WENl7I+mso6tct/rjZ9KV4r3c7R3g1bkd1Jz7UsXmznYnjnvS1mGL8A1yte+SwQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cICzWlT9frtiiDqDDXrLdoXt3YYU0+oyvhdlJXzb0R7BmdWekNdpKzNA3LLaB5CnSkLkLp4FgRAaSZ44pIFqf3EJNFcQI5PH0wwzbSnRR2Lc+hhxOYdNtgAO9ezpSbVSh5nhgP5bmv3a3vWz2cxxbWrGsjxO+31/+wTIi5IijbLJe4juddR3+SvMiuN8ihAi3MD069QPL11LVhPOO8Qzq1L1rtMbbVRlKFQrdwIoojP0zzwirBSmaS+aazla8Gu+JaAO9bipSEK2+16m3sFTsoqTzNXjTcV7uIsNk99uRveUCIn+4DhZ69XzzusfHn6h5GQLACa3URAaqRRAT9dgnQ==
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Delivery-date: Mon, 24 Oct 2022 11:41:28 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Hi Julien,

On 24/10/2022 12:51, Julien Grall wrote:
> Caution: This message originated from an External Source. Use proper caution 
> when opening attachments, clicking links, or responding.
> 
> 
> On 24/10/2022 10:07, Michal Orzel wrote:
>> Hello,
> 
> Hi Michal,
> 
>> Recently I came across a deadcode in Xen Arm arch timer code. Briefly 
>> speaking, we are routing
>> the NS phys timer (CNTP) IRQ to Xen, even though Xen does not make use of it 
>> (as it uses the hypervisor timer CNTHP).
>> This timer is fully emulated, which means that there is nothing that can 
>> trigger such IRQ. This code is
>> a left over from early days, where the CNTHP was buggy on some models and we 
>> had to use the CNTP instead.
>>
>> As far as the problem itself is not really interesting, it raises a question 
>> of what to do with a deadcode,
>> as there might be/are other deadcode places in Xen.
> 
> There are multiple definition of deadcode. Depending on which one you
> chose, then this could cover IS_ENABLED() and possibly #ifdef. So this
> would result to a lot of places impacted with the decision.
> 
> So can you clarify what you mean by deadcode?
In the timer example, I think we have both a deadcode and unreachable code.
For the purpose of this discussion, let's take the MISRA definition of a 
deadcode which is a "code that can be executed
but has no effect on the functional behavior of the program". This differs from 
the unreachable code definition that is
a "code that cannot be executed". Setting up the IRQ for Xen is an example of a 
deadcode. Code within IRQ handler is an unreachable code
(there is nothing that can trigger this IRQ).

What I mean by deadcode happens to be the sum of the two cases above i.e. the 
code that cannot be executed as well as the code that
does not impact the functionality of the program.

> 
>> One may say that it is useful to keep it, because one day,
>> someone might need it when dealing with yet another broken HW. Such person 
>> would still need to modify the other
>> part of the code (e.g. reprogram_timer), but there would be less work 
>> required overall. Personally, I'm not in favor of
>> such approach, because we should not really support possible scenarios with 
>> broken HW (except for erratas listing known issues).
> 
> The difference between "broken HW" and "HW with known errata" is a bit
> unclear to me. Can you clarify how you would make the difference here?
> 
> In particular, at which point do you consider that the HW should not be
> supported by Xen?
I'm not saying that HW should not be supported. The difference for me between 
broken HW and
HW with known errata is that for the former, the incorrect behavior is often 
due to the early support stage,
using emulators/models instead of real HW, whereas for the latter, the HW is 
already released and it happens to be that it is buggy
(the HW vendor is aware of the issue and released erratas). Do we have any 
example in Xen for supporting broken HW,
whose vendor is not aware of the issue or did not release any errata?

> 
>> Also, as part of the certification/FUSA process, there should be no deadcode 
>> and we should have explanation for every block of code.
> 
> See above. What are you trying to cover by deadcode? Would protecting
> code with IS_ENABLED() (or #ifdef) ok?
I think this would be ok from the certification point of view (this would at 
least means, that we are aware of the issue
and we took some steps). Otherwise, such code is just an example of a 
deadcode/unreachable code.

> 
>>
>> There are different ways to deal with a deadcode: > 1. Get rid of it 
>> completely
>> 2. Leave it as it is
>> 3. Admit that it can be useful one day and:
>>    3.1. protect it with #if 0
>>    3.2. protect it with a new Kconfig option (disabled by default) using 
>> #ifdef
>>    3.3. protect it with a new Kconfig option (disabled by default) using 
>> IS_ENABLED (to make sure code always compile)
>>    3.4. protect it with a command line option (allowing to choose the timer 
>> to be used by Xen)
>> ...
>>
>> Let me know what you think.
> 
> Before answering the question, I would need some clarifications on your aim.
> 
> Cheers,
> 
> --
> Julien Grall

~Michal



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.