Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: parisc: struct device - replace bus_id with dev_name(), dev_set_name() parisc: fix kernel crash when unwinding a userspace process parisc: __kernel_time_t is always long
This commit is contained in:
Коммит
a6e470fd1b
|
@ -42,9 +42,9 @@ struct parisc_driver {
|
|||
#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv)
|
||||
#define parisc_parent(d) to_parisc_device(d->dev.parent)
|
||||
|
||||
static inline char *parisc_pathname(struct parisc_device *d)
|
||||
static inline const char *parisc_pathname(struct parisc_device *d)
|
||||
{
|
||||
return d->dev.bus_id;
|
||||
return dev_name(&d->dev);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -24,13 +24,12 @@ typedef int __kernel_daddr_t;
|
|||
typedef unsigned long __kernel_size_t;
|
||||
typedef long __kernel_ssize_t;
|
||||
typedef long __kernel_ptrdiff_t;
|
||||
typedef long __kernel_time_t;
|
||||
#else
|
||||
typedef unsigned int __kernel_size_t;
|
||||
typedef int __kernel_ssize_t;
|
||||
typedef int __kernel_ptrdiff_t;
|
||||
typedef long __kernel_time_t;
|
||||
#endif
|
||||
typedef long __kernel_time_t;
|
||||
typedef char * __kernel_caddr_t;
|
||||
|
||||
typedef unsigned short __kernel_uid16_t;
|
||||
|
|
|
@ -43,7 +43,7 @@ struct hppa_dma_ops *hppa_dma_ops __read_mostly;
|
|||
EXPORT_SYMBOL(hppa_dma_ops);
|
||||
|
||||
static struct device root = {
|
||||
.bus_id = "parisc",
|
||||
.init_name = "parisc",
|
||||
};
|
||||
|
||||
static inline int check_dev(struct device *dev)
|
||||
|
@ -393,7 +393,8 @@ EXPORT_SYMBOL(print_pci_hwpath);
|
|||
static void setup_bus_id(struct parisc_device *padev)
|
||||
{
|
||||
struct hardware_path path;
|
||||
char *output = padev->dev.bus_id;
|
||||
char name[20];
|
||||
char *output = name;
|
||||
int i;
|
||||
|
||||
get_node_path(padev->dev.parent, &path);
|
||||
|
@ -404,6 +405,7 @@ static void setup_bus_id(struct parisc_device *padev)
|
|||
output += sprintf(output, "%u:", (unsigned char) path.bc[i]);
|
||||
}
|
||||
sprintf(output, "%u", (unsigned char) padev->hw_path);
|
||||
dev_set_name(&padev->dev, name);
|
||||
}
|
||||
|
||||
struct parisc_device * create_tree_node(char id, struct device *parent)
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/bug.h>
|
||||
|
||||
#include <asm/assembly.h>
|
||||
|
@ -51,7 +50,7 @@
|
|||
DEFINE_SPINLOCK(pa_dbit_lock);
|
||||
#endif
|
||||
|
||||
void parisc_show_stack(struct task_struct *t, unsigned long *sp,
|
||||
static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
|
||||
struct pt_regs *regs);
|
||||
|
||||
static int printbinary(char *buf, unsigned long x, int nbits)
|
||||
|
@ -121,18 +120,19 @@ static void print_fr(char *level, struct pt_regs *regs)
|
|||
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
int i;
|
||||
int i, user;
|
||||
char *level;
|
||||
unsigned long cr30, cr31;
|
||||
|
||||
level = user_mode(regs) ? KERN_DEBUG : KERN_CRIT;
|
||||
user = user_mode(regs);
|
||||
level = user ? KERN_DEBUG : KERN_CRIT;
|
||||
|
||||
print_gr(level, regs);
|
||||
|
||||
for (i = 0; i < 8; i += 4)
|
||||
PRINTREGS(level, regs->sr, "sr", RFMT, i);
|
||||
|
||||
if (user_mode(regs))
|
||||
if (user)
|
||||
print_fr(level, regs);
|
||||
|
||||
cr30 = mfctl(30);
|
||||
|
@ -145,14 +145,18 @@ void show_regs(struct pt_regs *regs)
|
|||
printk("%s CPU: %8d CR30: " RFMT " CR31: " RFMT "\n",
|
||||
level, current_thread_info()->cpu, cr30, cr31);
|
||||
printk("%s ORIG_R28: " RFMT "\n", level, regs->orig_r28);
|
||||
printk(level);
|
||||
print_symbol(" IAOQ[0]: %s\n", regs->iaoq[0]);
|
||||
printk(level);
|
||||
print_symbol(" IAOQ[1]: %s\n", regs->iaoq[1]);
|
||||
printk(level);
|
||||
print_symbol(" RP(r2): %s\n", regs->gr[2]);
|
||||
|
||||
parisc_show_stack(current, NULL, regs);
|
||||
if (user) {
|
||||
printk("%s IAOQ[0]: " RFMT "\n", level, regs->iaoq[0]);
|
||||
printk("%s IAOQ[1]: " RFMT "\n", level, regs->iaoq[1]);
|
||||
printk("%s RP(r2): " RFMT "\n", level, regs->gr[2]);
|
||||
} else {
|
||||
printk("%s IAOQ[0]: %pS\n", level, (void *) regs->iaoq[0]);
|
||||
printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
|
||||
printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
|
||||
|
||||
parisc_show_stack(current, NULL, regs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -173,20 +177,15 @@ static void do_show_stack(struct unwind_frame_info *info)
|
|||
break;
|
||||
|
||||
if (__kernel_text_address(info->ip)) {
|
||||
printk("%s [<" RFMT ">] ", (i&0x3)==1 ? KERN_CRIT : "", info->ip);
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
print_symbol("%s\n", info->ip);
|
||||
#else
|
||||
if ((i & 0x03) == 0)
|
||||
printk("\n");
|
||||
#endif
|
||||
printk(KERN_CRIT " [<" RFMT ">] %pS\n",
|
||||
info->ip, (void *) info->ip);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
printk("\n");
|
||||
printk(KERN_CRIT "\n");
|
||||
}
|
||||
|
||||
void parisc_show_stack(struct task_struct *task, unsigned long *sp,
|
||||
static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
struct unwind_frame_info info;
|
||||
|
|
Загрузка…
Ссылка в новой задаче