Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 8 May 2007 18:50:19 +0000 (11:50 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 8 May 2007 18:50:19 +0000 (11:50 -0700)
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (77 commits)
  [POWERPC] Abolish powerpc_flash_init()
  [POWERPC] Early serial debug support for PPC44x
  [POWERPC] Support for the Ebony 440GP reference board in arch/powerpc
  [POWERPC] Add device tree for Ebony
  [POWERPC] Add powerpc/platforms/44x, disable platforms/4xx for now
  [POWERPC] MPIC U3/U4 MSI backend
  [POWERPC] MPIC MSI allocator
  [POWERPC] Enable MSI mappings for MPIC
  [POWERPC] Tell Phyp we support MSI
  [POWERPC] RTAS MSI implementation
  [POWERPC] PowerPC MSI infrastructure
  [POWERPC] Rip out the existing powerpc msi stubs
  [POWERPC] Remove use of 4level-fixup.h for ppc32
  [POWERPC] Add powerpc PCI-E reset API implementation
  [POWERPC] Holly bootwrapper
  [POWERPC] Holly DTS
  [POWERPC] Holly defconfig
  [POWERPC] Add support for 750CL Holly board
  [POWERPC] Generalize tsi108 PCI setup
  [POWERPC] Generalize tsi108 PHY types
  ...

Fixed conflict in include/asm-powerpc/kdebug.h manually

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1  2 
arch/powerpc/kernel/kprobes.c
arch/powerpc/kernel/udbg.c
arch/powerpc/mm/fault.c
arch/powerpc/platforms/powermac/smp.c
drivers/macintosh/therm_adt746x.c
drivers/pci/hotplug/rpaphp_core.c
drivers/video/aty/radeon_base.c
drivers/video/aty/radeon_pm.c
drivers/video/riva/fbdev.c
include/asm-powerpc/kdebug.h

index 088b8c6defa0a11ee2d03e50af9ce8636220732c,c27f41870c8f182e82308327ef5353ccfff7e3d6..0c96611f02f4852600711f416c5d9d8b6f036b85
@@@ -30,8 -30,8 +30,8 @@@
  #include <linux/ptrace.h>
  #include <linux/preempt.h>
  #include <linux/module.h>
 +#include <linux/kdebug.h>
  #include <asm/cacheflush.h>
 -#include <asm/kdebug.h>
  #include <asm/sstep.h>
  #include <asm/uaccess.h>
  
@@@ -126,13 -126,22 +126,13 @@@ static void __kprobes set_current_kprob
  }
  
  /* Called with kretprobe_lock held */
 -void __kprobes arch_prepare_kretprobe(struct kretprobe *rp,
 +void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
                                      struct pt_regs *regs)
  {
 -      struct kretprobe_instance *ri;
 -
 -      if ((ri = get_free_rp_inst(rp)) != NULL) {
 -              ri->rp = rp;
 -              ri->task = current;
 -              ri->ret_addr = (kprobe_opcode_t *)regs->link;
 -
 -              /* Replace the return addr with trampoline addr */
 -              regs->link = (unsigned long)kretprobe_trampoline;
 -              add_rp_inst(ri);
 -      } else {
 -              rp->nmissed++;
 -      }
 +      ri->ret_addr = (kprobe_opcode_t *)regs->link;
 +
 +      /* Replace the return addr with trampoline addr */
 +      regs->link = (unsigned long)kretprobe_trampoline;
  }
  
  static int __kprobes kprobe_handler(struct pt_regs *regs)
@@@ -327,7 -336,7 +327,7 @@@ int __kprobes trampoline_probe_handler(
                        break;
        }
  
 -      BUG_ON(!orig_ret_address || (orig_ret_address == trampoline_address));
 +      kretprobe_assert(ri, orig_ret_address, trampoline_address);
        regs->nip = orig_ret_address;
  
        reset_current_kprobe();
@@@ -401,7 -410,7 +401,7 @@@ out
        return 1;
  }
  
static int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
+ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
  {
        struct kprobe *cur = kprobe_running();
        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
@@@ -486,14 -495,6 +486,6 @@@ int __kprobes kprobe_exceptions_notify(
                if (post_kprobe_handler(args->regs))
                        ret = NOTIFY_STOP;
                break;
-       case DIE_PAGE_FAULT:
-               /* kprobe_running() needs smp_processor_id() */
-               preempt_disable();
-               if (kprobe_running() &&
-                   kprobe_fault_handler(args->regs, args->trapnr))
-                       ret = NOTIFY_STOP;
-               preempt_enable();
-               break;
        default:
                break;
        }
@@@ -550,11 -551,3 +542,11 @@@ int __init arch_init_kprobes(void
  {
        return register_kprobe(&trampoline_p);
  }
 +
 +int __kprobes arch_trampoline_kprobe(struct kprobe *p)
 +{
 +      if (p->addr == (kprobe_opcode_t *)&kretprobe_trampoline)
 +              return 1;
 +
 +      return 0;
 +}
index 147a2d83de10660a0a8088f8197f7d00e7776a5c,7ef97ea8b3efd41488b175b80ca59571dd865fa5..87703df87509031c6b163065a7afd08cb56ca593
@@@ -51,6 -51,9 +51,9 @@@ void __init udbg_early_init(void
        udbg_init_pas_realmode();
  #elif defined(CONFIG_BOOTX_TEXT)
        udbg_init_btext();
+ #elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
+       /* PPC44x debug */
+       udbg_init_44x_as1();
  #endif
  }
  
@@@ -142,22 -145,29 +145,22 @@@ static void udbg_console_write(struct c
  static struct console udbg_console = {
        .name   = "udbg",
        .write  = udbg_console_write,
 -      .flags  = CON_PRINTBUFFER | CON_ENABLED,
 +      .flags  = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT,
        .index  = -1,
  };
  
  static int early_console_initialized;
  
 -void __init disable_early_printk(void)
 -{
 -      if (!early_console_initialized)
 -              return;
 -      if (strstr(boot_command_line, "udbg-immortal")) {
 -              printk(KERN_INFO "early console immortal !\n");
 -              return;
 -      }
 -      unregister_console(&udbg_console);
 -      early_console_initialized = 0;
 -}
 -
  /* called by setup_system */
  void register_early_udbg_console(void)
  {
        if (early_console_initialized)
                return;
 +
 +      if (strstr(boot_command_line, "udbg-immortal")) {
 +              printk(KERN_INFO "early console immortal !\n");
 +              udbg_console.flags &= ~CON_BOOT;
 +      }
        early_console_initialized = 1;
        register_console(&udbg_console);
  }
diff --combined arch/powerpc/mm/fault.c
index bec0cce79a78f6c1db3671c611ae83a7230170a0,a0f88026e46481dd43b4c19039c4863c8f815fcd..bfe901353142f9d835eafa01cbf37b58868d0e10
@@@ -28,7 -28,6 +28,7 @@@
  #include <linux/highmem.h>
  #include <linux/module.h>
  #include <linux/kprobes.h>
 +#include <linux/kdebug.h>
  
  #include <asm/page.h>
  #include <asm/pgtable.h>
  #include <asm/system.h>
  #include <asm/uaccess.h>
  #include <asm/tlbflush.h>
 -#include <asm/kdebug.h>
  #include <asm/siginfo.h>
  
- #ifdef CONFIG_KPROBES
- ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
  
- /* Hook to register for page fault notifications */
- int register_page_fault_notifier(struct notifier_block *nb)
- {
-       return atomic_notifier_chain_register(&notify_page_fault_chain, nb);
- }
- int unregister_page_fault_notifier(struct notifier_block *nb)
+ #ifdef CONFIG_KPROBES
+ static inline int notify_page_fault(struct pt_regs *regs)
  {
-       return atomic_notifier_chain_unregister(&notify_page_fault_chain, nb);
- }
+       int ret = 0;
+       /* kprobe_running() needs smp_processor_id() */
+       if (!user_mode(regs)) {
+               preempt_disable();
+               if (kprobe_running() && kprobe_fault_handler(regs, 11))
+                       ret = 1;
+               preempt_enable();
+       }
  
- static inline int notify_page_fault(enum die_val val, const char *str,
-                       struct pt_regs *regs, long err, int trap, int sig)
- {
-       struct die_args args = {
-               .regs = regs,
-               .str = str,
-               .err = err,
-               .trapnr = trap,
-               .signr = sig
-       };
-       return atomic_notifier_call_chain(&notify_page_fault_chain, val, &args);
+       return ret;
  }
  #else
- static inline int notify_page_fault(enum die_val val, const char *str,
-                       struct pt_regs *regs, long err, int trap, int sig)
+ static inline int notify_page_fault(struct pt_regs *regs)
  {
-       return NOTIFY_DONE;
+       return 0;
  }
  #endif
  
@@@ -175,8 -164,7 +164,7 @@@ int __kprobes do_page_fault(struct pt_r
        is_write = error_code & ESR_DST;
  #endif /* CONFIG_4xx || CONFIG_BOOKE */
  
-       if (notify_page_fault(DIE_PAGE_FAULT, "page_fault", regs, error_code,
-                               11, SIGSEGV) == NOTIFY_STOP)
+       if (notify_page_fault(regs))
                return 0;
  
        if (trap == 0x300) {
index d2cf6136b32c3b0839526d9bef707f95abf9b9b6,84f1860493bb4d9da285139998d12d23732df9da..686ed82bde79a6608abcf5915848a47a6ff8ffc8
@@@ -24,6 -24,7 +24,6 @@@
  #include <linux/kernel.h>
  #include <linux/sched.h>
  #include <linux/smp.h>
 -#include <linux/smp_lock.h>
  #include <linux/interrupt.h>
  #include <linux/kernel_stat.h>
  #include <linux/delay.h>
@@@ -561,7 -562,7 +561,7 @@@ static void __init smp_core99_setup_i2c
        /* Look for the clock chip */
        while ((cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL) {
                p = of_get_parent(cc);
-               ok = p && device_is_compatible(p, "uni-n-i2c");
+               ok = p && of_device_is_compatible(p, "uni-n-i2c");
                of_node_put(p);
                if (!ok)
                        continue;
                        continue;
                switch (*reg) {
                case 0xd2:
-                       if (device_is_compatible(cc,"pulsar-legacy-slewing")) {
+                       if (of_device_is_compatible(cc,"pulsar-legacy-slewing")) {
                                pmac_tb_freeze = smp_core99_pulsar_tb_freeze;
                                pmac_tb_pulsar_addr = 0xd2;
                                name = "Pulsar";
-                       } else if (device_is_compatible(cc, "cy28508")) {
+                       } else if (of_device_is_compatible(cc, "cy28508")) {
                                pmac_tb_freeze = smp_core99_cypress_tb_freeze;
                                name = "Cypress";
                        }
@@@ -899,7 -900,7 +899,7 @@@ void smp_core99_cpu_die(unsigned int cp
        cpu_dead[cpu] = 0;
  }
  
- #endif
+ #endif /* CONFIG_HOTPLUG_CPU && CONFIG_PP32 */
  
  /* Core99 Macs (dual G4s and G5s) */
  struct smp_ops_t core99_smp_ops = {
        .setup_cpu      = smp_core99_setup_cpu,
        .give_timebase  = smp_core99_give_timebase,
        .take_timebase  = smp_core99_take_timebase,
- #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32)
+ #if defined(CONFIG_HOTPLUG_CPU)
+ # if defined(CONFIG_PPC32)
        .cpu_disable    = smp_core99_cpu_disable,
        .cpu_die        = smp_core99_cpu_die,
+ # endif
+ # if defined(CONFIG_PPC64)
+       .cpu_disable    = generic_cpu_disable,
+       .cpu_die        = generic_cpu_die,
+       /* intentionally do *NOT* assign cpu_enable,
+        * the generic code will use kick_cpu then! */
+ # endif
  #endif
  };
index 6c3734325f8e6ace4f37698e322d2b66edeaee83,178afa1fd56c0ad899ec4a255cdf01fe2db2f114..bd55e6ab99fc536164fe0c5b72a107fb6b6012f3
@@@ -19,6 -19,7 +19,6 @@@
  #include <linux/slab.h>
  #include <linux/init.h>
  #include <linux/spinlock.h>
 -#include <linux/smp_lock.h>
  #include <linux/wait.h>
  #include <linux/suspend.h>
  #include <linux/kthread.h>
@@@ -559,9 -560,9 +559,9 @@@ thermostat_init(void
        np = of_find_node_by_name(NULL, "fan");
        if (!np)
                return -ENODEV;
-       if (device_is_compatible(np, "adt7460"))
+       if (of_device_is_compatible(np, "adt7460"))
                therm_type = ADT7460;
-       else if (device_is_compatible(np, "adt7467"))
+       else if (of_device_is_compatible(np, "adt7467"))
                therm_type = ADT7467;
        else
                return -ENODEV;
index 6e3118733508de00f3220e0b9058ace37e393fb6,899eed00274848be378ebc232acfbd08d6f7590d..458c08ef2654bcc5089442044dc99aaa4aedc7d6
@@@ -29,6 -29,7 +29,6 @@@
  #include <linux/pci_hotplug.h>
  #include <linux/slab.h>
  #include <linux/smp.h>
 -#include <linux/smp_lock.h>
  #include <linux/init.h>
  #include <asm/eeh.h>       /* for eeh_add_device() */
  #include <asm/rtas.h>         /* rtas_call */
@@@ -169,10 -170,10 +169,10 @@@ static int get_children_props(struct de
  {
        const int *indexes, *names, *types, *domains;
  
-       indexes = get_property(dn, "ibm,drc-indexes", NULL);
-       names = get_property(dn, "ibm,drc-names", NULL);
-       types = get_property(dn, "ibm,drc-types", NULL);
-       domains = get_property(dn, "ibm,drc-power-domains", NULL);
+       indexes = of_get_property(dn, "ibm,drc-indexes", NULL);
+       names = of_get_property(dn, "ibm,drc-names", NULL);
+       types = of_get_property(dn, "ibm,drc-types", NULL);
+       domains = of_get_property(dn, "ibm,drc-power-domains", NULL);
  
        if (!indexes || !names || !types || !domains) {
                /* Slot does not have dynamically-removable children */
@@@ -205,7 -206,7 +205,7 @@@ int rpaphp_get_drc_props(struct device_
        char *name_tmp, *type_tmp;
        int i, rc;
  
-       my_index = get_property(dn, "ibm,my-drc-index", NULL);
+       my_index = of_get_property(dn, "ibm,my-drc-index", NULL);
        if (!my_index) {
                /* Node isn't DLPAR/hotplug capable */
                return -EINVAL;
index 0ec36cd5de28d0103c719931174cc24cf18cb299,9d629fe1709d3bde52eb7ab5d31625cb72d1fee0..2ce05019301892d9a0420f97ef2b803f8742100a
        { PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }
  
  static struct pci_device_id radeonfb_pci_table[] = {
 +        /* Radeon Xpress 200m */
 +      CHIP_DEF(PCI_CHIP_RS480_5955,   RS480,  CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY),
        /* Mobility M6 */
        CHIP_DEF(PCI_CHIP_RADEON_LY,    RV100,  CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
        CHIP_DEF(PCI_CHIP_RADEON_LZ,    RV100,  CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
@@@ -424,7 -422,7 +424,7 @@@ static int __devinit radeon_read_xtal_O
  
        if (dp == NULL)
                return -ENODEV;
-       val = get_property(dp, "ATY,RefCLK", NULL);
+       val = of_get_property(dp, "ATY,RefCLK", NULL);
        if (!val || !*val) {
                printk(KERN_WARNING "radeonfb: No ATY,RefCLK property !\n");
                return -EINVAL;
  
        rinfo->pll.ref_clk = (*val) / 10;
  
-       val = get_property(dp, "ATY,SCLK", NULL);
+       val = of_get_property(dp, "ATY,SCLK", NULL);
        if (val && *val)
                rinfo->pll.sclk = (*val) / 10;
  
-       val = get_property(dp, "ATY,MCLK", NULL);
+       val = of_get_property(dp, "ATY,MCLK", NULL);
        if (val && *val)
                rinfo->pll.mclk = (*val) / 10;
  
@@@ -1996,8 -1994,7 +1996,8 @@@ static void radeon_identify_vram(struc
        /* framebuffer size */
          if ((rinfo->family == CHIP_FAMILY_RS100) ||
              (rinfo->family == CHIP_FAMILY_RS200) ||
 -            (rinfo->family == CHIP_FAMILY_RS300)) {
 +            (rinfo->family == CHIP_FAMILY_RS300) ||
 +          (rinfo->family == CHIP_FAMILY_RS480) ) {
            u32 tom = INREG(NB_TOM);
            tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);
  
index 4425f7e903093ef924b2a54a5dd15c208f5a58da,1786ae18832267ebcb64fbc5de63109eef8aa9a5..be1d57bf9dc8f82c7c9f6b4ea62b35bdf6d43be7
@@@ -1290,7 -1290,7 +1290,7 @@@ static void radeon_pm_full_reset_sdram(
                if (rinfo->of_node != NULL) {
                        int size;
  
-                       mrtable = get_property(rinfo->of_node, "ATY,MRT", &size);
+                       mrtable = of_get_property(rinfo->of_node, "ATY,MRT", &size);
                        if (mrtable)
                                mrtable_size = size >> 2;
                        else
@@@ -2826,15 -2826,11 +2826,15 @@@ void radeonfb_pm_init(struct radeonfb_i
        rinfo->pm_reg = pci_find_capability(rinfo->pdev, PCI_CAP_ID_PM);
  
        /* Enable/Disable dynamic clocks: TODO add sysfs access */
 -      rinfo->dynclk = dynclk;
 -      if (dynclk == 1) {
 +      if (rinfo->family == CHIP_FAMILY_RS480)
 +              rinfo->dynclk = -1;
 +      else
 +              rinfo->dynclk = dynclk;
 +
 +      if (rinfo->dynclk == 1) {
                radeon_pm_enable_dynamic_mode(rinfo);
                printk("radeonfb: Dynamic Clock Power Management enabled\n");
 -      } else if (dynclk == 0) {
 +      } else if (rinfo->dynclk == 0) {
                radeon_pm_disable_dynamic_mode(rinfo);
                printk("radeonfb: Dynamic Clock Power Management disabled\n");
        }
index 19dff8dbe8afbeef2b2609436883da386527b565,9c6bd0991852033d43eb657aa38c4db6e9942f3a..0fe547842c643efceef03f9582e4940b7a3e2fd0
@@@ -317,15 -317,15 +317,15 @@@ static int riva_bl_update_status(struc
        else
                level = bd->props.brightness;
  
 -      tmp_pmc = par->riva.PMC[0x10F0/4] & 0x0000FFFF;
 -      tmp_pcrt = par->riva.PCRTC0[0x081C/4] & 0xFFFFFFFC;
 +      tmp_pmc = NV_RD32(par->riva.PMC, 0x10F0) & 0x0000FFFF;
 +      tmp_pcrt = NV_RD32(par->riva.PCRTC0, 0x081C) & 0xFFFFFFFC;
        if(level > 0) {
                tmp_pcrt |= 0x1;
                tmp_pmc |= (1 << 31); /* backlight bit */
                tmp_pmc |= riva_bl_get_level_brightness(par, level) << 16; /* level */
        }
 -      par->riva.PCRTC0[0x081C/4] = tmp_pcrt;
 -      par->riva.PMC[0x10F0/4] = tmp_pmc;
 +      NV_WR32(par->riva.PCRTC0, 0x081C, tmp_pcrt);
 +      NV_WR32(par->riva.PMC, 0x10F0, tmp_pmc);
  
        return 0;
  }
@@@ -1760,13 -1760,13 +1760,13 @@@ static int __devinit riva_get_EDID_OF(s
        NVTRACE_ENTER();
        dp = pci_device_to_OF_node(pd);
        for (; dp != NULL; dp = dp->child) {
-               disptype = get_property(dp, "display-type", NULL);
+               disptype = of_get_property(dp, "display-type", NULL);
                if (disptype == NULL)
                        continue;
                if (strncmp(disptype, "LCD", 3) != 0)
                        continue;
                for (i = 0; propnames[i] != NULL; ++i) {
-                       pedid = get_property(dp, propnames[i], NULL);
+                       pedid = of_get_property(dp, propnames[i], NULL);
                        if (pedid != NULL) {
                                par->EDID = (unsigned char *)pedid;
                                NVTRACE("LCD found.\n");
@@@ -1788,10 -1788,8 +1788,10 @@@ static int __devinit riva_get_EDID_i2c(
  
        NVTRACE_ENTER();
        riva_create_i2c_busses(par);
 -      for (i = 0; i < par->bus; i++) {
 -              riva_probe_i2c_connector(par, i+1, &par->EDID);
 +      for (i = 0; i < 3; i++) {
 +              if (!par->chan[i].par)
 +                      continue;
 +              riva_probe_i2c_connector(par, i, &par->EDID);
                if (par->EDID && !fb_parse_edid(par->EDID, &var)) {
                        printk(PFX "Found EDID Block from BUS %i\n", i);
                        break;
@@@ -2106,7 -2104,7 +2106,7 @@@ err_ret
        return ret;
  }
  
 -static void __exit rivafb_remove(struct pci_dev *pd)
 +static void __devexit rivafb_remove(struct pci_dev *pd)
  {
        struct fb_info *info = pci_get_drvdata(pd);
        struct riva_par *par = info->par;
@@@ -2187,7 -2185,7 +2187,7 @@@ static struct pci_driver rivafb_driver 
        .name           = "rivafb",
        .id_table       = rivafb_pci_tbl,
        .probe          = rivafb_probe,
 -      .remove         = __exit_p(rivafb_remove),
 +      .remove         = __devexit_p(rivafb_remove),
  };
  
  
index 1c73d2ec9b597cc9a9d4fa61a93ea7d9f9967eb0,df996b933def3c8dcdfd8ce3d3961b5768d6dda4..295f0162c60827a750664b9ece653d134f1a277f
@@@ -6,8 -6,32 +6,19 @@@
  
  #include <linux/notifier.h>
  
- extern int register_page_fault_notifier(struct notifier_block *);
- extern int unregister_page_fault_notifier(struct notifier_block *);
 -struct pt_regs;
 -
 -struct die_args {
 -      struct pt_regs *regs;
 -      const char *str;
 -      long err;
 -      int trapnr;
 -      int signr;
 -};
 -
 -extern int register_die_notifier(struct notifier_block *);
 -extern int unregister_die_notifier(struct notifier_block *);
 -
+ /*
+  * These are only here because kprobes.c wants them to implement a
+  * blatant layering violation.  Will hopefully go away soon once all
+  * architectures are updated.
+  */
+ static inline int register_page_fault_notifier(struct notifier_block *nb)
+ {
+       return 0;
+ }
+ static inline int unregister_page_fault_notifier(struct notifier_block *nb)
+ {
+       return 0;
+ }
  extern struct atomic_notifier_head powerpc_die_chain;
  
  /* Grossly misnamed. */
@@@ -17,8 -41,13 +28,7 @@@ enum die_val 
        DIE_DABR_MATCH,
        DIE_BPT,
        DIE_SSTEP,
-       DIE_PAGE_FAULT,
  };
  
 -static inline int notify_die(enum die_val val,char *str,struct pt_regs *regs,long err,int trap, int sig)
 -{
 -      struct die_args args = { .regs=regs, .str=str, .err=err, .trapnr=trap,.signr=sig };
 -      return atomic_notifier_call_chain(&powerpc_die_chain, val, &args);
 -}
 -
  #endif /* __KERNEL__ */
  #endif /* _ASM_POWERPC_KDEBUG_H */