return ret;
  }
  
 -static struct notifier_block ghes_notifier_sci = {
 -      .notifier_call = ghes_notify_sci,
 +static struct notifier_block ghes_notifier_hed = {
 +      .notifier_call = ghes_notify_hed,
  };
  
+ #ifdef CONFIG_ACPI_APEI_SEA
+ static LIST_HEAD(ghes_sea);
+ 
+ /*
+  * Return 0 only if one of the SEA error sources successfully reported an error
+  * record sent from the firmware.
+  */
+ int ghes_notify_sea(void)
+ {
+       struct ghes *ghes;
+       int ret = -ENOENT;
+ 
+       rcu_read_lock();
+       list_for_each_entry_rcu(ghes, &ghes_sea, list) {
+               if (!ghes_proc(ghes))
+                       ret = 0;
+       }
+       rcu_read_unlock();
+       return ret;
+ }
+ 
+ static void ghes_sea_add(struct ghes *ghes)
+ {
+       mutex_lock(&ghes_list_mutex);
+       list_add_rcu(&ghes->list, &ghes_sea);
+       mutex_unlock(&ghes_list_mutex);
+ }
+ 
+ static void ghes_sea_remove(struct ghes *ghes)
+ {
+       mutex_lock(&ghes_list_mutex);
+       list_del_rcu(&ghes->list);
+       mutex_unlock(&ghes_list_mutex);
+       synchronize_rcu();
+ }
+ #else /* CONFIG_ACPI_APEI_SEA */
+ static inline void ghes_sea_add(struct ghes *ghes)
+ {
+       pr_err(GHES_PFX "ID: %d, trying to add SEA notification which is not supported\n",
+              ghes->generic->header.source_id);
+ }
+ 
+ static inline void ghes_sea_remove(struct ghes *ghes)
+ {
+       pr_err(GHES_PFX "ID: %d, trying to remove SEA notification which is not supported\n",
+              ghes->generic->header.source_id);
+ }
+ #endif /* CONFIG_ACPI_APEI_SEA */
+ 
  #ifdef CONFIG_HAVE_ACPI_APEI_NMI
  /*
   * printk is not safe in NMI context.  So in NMI handler, we allocate
        case ACPI_HEST_NOTIFY_POLLED:
        case ACPI_HEST_NOTIFY_EXTERNAL:
        case ACPI_HEST_NOTIFY_SCI:
 +      case ACPI_HEST_NOTIFY_GSIV:
 +      case ACPI_HEST_NOTIFY_GPIO:
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               if (!IS_ENABLED(CONFIG_ACPI_APEI_SEA)) {
+                       pr_warn(GHES_PFX "Generic hardware error source: %d notified via SEA is not supported\n",
+                               generic->header.source_id);
+                       rc = -ENOTSUPP;
+                       goto err;
+               }
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                if (!IS_ENABLED(CONFIG_HAVE_ACPI_APEI_NMI)) {
                        pr_warn(GHES_PFX "Generic hardware error source: %d notified via NMI interrupt is not supported!\n",
                        goto err_edac_unreg;
                }
                break;
 +
        case ACPI_HEST_NOTIFY_SCI:
 +      case ACPI_HEST_NOTIFY_GSIV:
 +      case ACPI_HEST_NOTIFY_GPIO:
                mutex_lock(&ghes_list_mutex);
 -              if (list_empty(&ghes_sci))
 -                      register_acpi_hed_notifier(&ghes_notifier_sci);
 -              list_add_rcu(&ghes->list, &ghes_sci);
 +              if (list_empty(&ghes_hed))
 +                      register_acpi_hed_notifier(&ghes_notifier_hed);
 +              list_add_rcu(&ghes->list, &ghes_hed);
                mutex_unlock(&ghes_list_mutex);
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               ghes_sea_add(ghes);
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                ghes_nmi_add(ghes);
                break;
                mutex_unlock(&ghes_list_mutex);
                synchronize_rcu();
                break;
 +
+       case ACPI_HEST_NOTIFY_SEA:
+               ghes_sea_remove(ghes);
+               break;
        case ACPI_HEST_NOTIFY_NMI:
                ghes_nmi_remove(ghes);
                break;