LCOV - code coverage report
Current view: top level - drivers/acpi/acpica - pswalk.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 22 22 100.0 %
Date: 2022-03-28 15:32:58 Functions: 1 1 100.0 %
Branches: 9 10 90.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
       2                 :            : /******************************************************************************
       3                 :            :  *
       4                 :            :  * Module Name: pswalk - Parser routines to walk parsed op tree(s)
       5                 :            :  *
       6                 :            :  * Copyright (C) 2000 - 2020, Intel Corp.
       7                 :            :  *
       8                 :            :  *****************************************************************************/
       9                 :            : 
      10                 :            : #include <acpi/acpi.h>
      11                 :            : #include "accommon.h"
      12                 :            : #include "acparser.h"
      13                 :            : 
      14                 :            : #define _COMPONENT          ACPI_PARSER
      15                 :            : ACPI_MODULE_NAME("pswalk")
      16                 :            : 
      17                 :            : /*******************************************************************************
      18                 :            :  *
      19                 :            :  * FUNCTION:    acpi_ps_delete_parse_tree
      20                 :            :  *
      21                 :            :  * PARAMETERS:  subtree_root        - Root of tree (or subtree) to delete
      22                 :            :  *
      23                 :            :  * RETURN:      None
      24                 :            :  *
      25                 :            :  * DESCRIPTION: Delete a portion of or an entire parse tree.
      26                 :            :  *
      27                 :            :  ******************************************************************************/
      28                 :            : #include "amlcode.h"
      29                 :     139141 : void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
      30                 :            : {
      31                 :     139141 :         union acpi_parse_object *op = subtree_root;
      32                 :     139141 :         union acpi_parse_object *next = NULL;
      33                 :     139141 :         union acpi_parse_object *parent = NULL;
      34                 :     139141 :         u32 level = 0;
      35                 :            : 
      36                 :     139141 :         ACPI_FUNCTION_TRACE_PTR(ps_delete_parse_tree, subtree_root);
      37                 :            : 
      38                 :     139141 :         ACPI_DEBUG_PRINT((ACPI_DB_PARSE_TREES, " root %p\n", subtree_root));
      39                 :            : 
      40                 :            :         /* Visit all nodes in the subtree */
      41                 :            : 
      42         [ +  - ]:     499688 :         while (op) {
      43         [ +  + ]:     499688 :                 if (op != parent) {
      44                 :            : 
      45                 :            :                         /* This is the descending case */
      46                 :            : 
      47                 :     393213 :                         if (ACPI_IS_DEBUG_ENABLED
      48                 :            :                             (ACPI_LV_PARSE_TREES, _COMPONENT)) {
      49                 :            : 
      50                 :            :                                 /* This debug option will print the entire parse tree */
      51                 :            : 
      52                 :            :                                 acpi_os_printf("      %*.s%s %p", (level * 4),
      53                 :            :                                                " ",
      54                 :            :                                                acpi_ps_get_opcode_name(op->
      55                 :            :                                                                        common.
      56                 :            :                                                                        aml_opcode),
      57                 :            :                                                op);
      58                 :            : 
      59                 :            :                                 if (op->named.aml_opcode == AML_INT_NAMEPATH_OP) {
      60                 :            :                                         acpi_os_printf("  %4.4s",
      61                 :            :                                                        op->common.value.string);
      62                 :            :                                 }
      63                 :            :                                 if (op->named.aml_opcode == AML_STRING_OP) {
      64                 :            :                                         acpi_os_printf("  %s",
      65                 :            :                                                        op->common.value.string);
      66                 :            :                                 }
      67                 :            :                                 acpi_os_printf("\n");
      68                 :            :                         }
      69                 :            : 
      70                 :            :                         /* Look for an argument or child of the current op */
      71                 :            : 
      72                 :     393213 :                         next = acpi_ps_get_arg(op, 0);
      73         [ +  + ]:     393213 :                         if (next) {
      74                 :            : 
      75                 :            :                                 /* Still going downward in tree (Op is not completed yet) */
      76                 :            : 
      77                 :     106475 :                                 op = next;
      78                 :     106475 :                                 level++;
      79                 :     106475 :                                 continue;
      80                 :            :                         }
      81                 :            :                 }
      82                 :            : 
      83                 :            :                 /* No more children, this Op is complete. */
      84                 :            : 
      85                 :     393213 :                 next = op->common.next;
      86                 :     393213 :                 parent = op->common.parent;
      87                 :            : 
      88                 :     393213 :                 acpi_ps_free_op(op);
      89                 :            : 
      90                 :            :                 /* If we are back to the starting point, the walk is complete. */
      91                 :            : 
      92         [ +  + ]:     393213 :                 if (op == subtree_root) {
      93                 :            :                         return_VOID;
      94                 :            :                 }
      95                 :            : 
      96         [ +  + ]:     254072 :                 if (next) {
      97                 :            :                         op = next;
      98                 :            :                 } else {
      99                 :     106475 :                         level--;
     100                 :     106475 :                         op = parent;
     101                 :            :                 }
     102                 :            :         }
     103                 :            : 
     104                 :            :         return_VOID;
     105                 :            : }

Generated by: LCOV version 1.14