提交 0d56d1aa 编写于 作者: K Kyle McMartin

parisc: inventory.c, fix bloated stack frame

The pa_pdc_cell struct can be kmalloc'd, so do that
instead.
Signed-off-by: NKyle McMartin <kyle@mcmartin.ca>
上级 64a0cdb0
...@@ -170,23 +170,27 @@ static void __init pagezero_memconfig(void) ...@@ -170,23 +170,27 @@ static void __init pagezero_memconfig(void)
static int __init static int __init
pat_query_module(ulong pcell_loc, ulong mod_index) pat_query_module(ulong pcell_loc, ulong mod_index)
{ {
pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell;
unsigned long bytecnt; unsigned long bytecnt;
unsigned long temp; /* 64-bit scratch value */ unsigned long temp; /* 64-bit scratch value */
long status; /* PDC return value status */ long status; /* PDC return value status */
struct parisc_device *dev; struct parisc_device *dev;
pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL);
if (!pa_pdc_cell)
panic("couldn't allocate memory for PDC_PAT_CELL!");
/* return cell module (PA or Processor view) */ /* return cell module (PA or Processor view) */
status = pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, status = pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index,
PA_VIEW, &pa_pdc_cell); PA_VIEW, pa_pdc_cell);
if (status != PDC_OK) { if (status != PDC_OK) {
/* no more cell modules or error */ /* no more cell modules or error */
return status; return status;
} }
temp = pa_pdc_cell.cba; temp = pa_pdc_cell->cba;
dev = alloc_pa_dev(PAT_GET_CBA(temp), &pa_pdc_cell.mod_path); dev = alloc_pa_dev(PAT_GET_CBA(temp), &(pa_pdc_cell->mod_path));
if (!dev) { if (!dev) {
return PDC_OK; return PDC_OK;
} }
...@@ -203,8 +207,8 @@ pat_query_module(ulong pcell_loc, ulong mod_index) ...@@ -203,8 +207,8 @@ pat_query_module(ulong pcell_loc, ulong mod_index)
/* save generic info returned from the call */ /* save generic info returned from the call */
/* REVISIT: who is the consumer of this? not sure yet... */ /* REVISIT: who is the consumer of this? not sure yet... */
dev->mod_info = pa_pdc_cell.mod_info; /* pass to PAT_GET_ENTITY() */ dev->mod_info = pa_pdc_cell->mod_info; /* pass to PAT_GET_ENTITY() */
dev->pmod_loc = pa_pdc_cell.mod_location; dev->pmod_loc = pa_pdc_cell->mod_location;
register_parisc_device(dev); /* advertise device */ register_parisc_device(dev); /* advertise device */
...@@ -216,14 +220,14 @@ pat_query_module(ulong pcell_loc, ulong mod_index) ...@@ -216,14 +220,14 @@ pat_query_module(ulong pcell_loc, ulong mod_index)
case PAT_ENTITY_PROC: case PAT_ENTITY_PROC:
printk(KERN_DEBUG "PAT_ENTITY_PROC: id_eid 0x%lx\n", printk(KERN_DEBUG "PAT_ENTITY_PROC: id_eid 0x%lx\n",
pa_pdc_cell.mod[0]); pa_pdc_cell->mod[0]);
break; break;
case PAT_ENTITY_MEM: case PAT_ENTITY_MEM:
printk(KERN_DEBUG printk(KERN_DEBUG
"PAT_ENTITY_MEM: amount 0x%lx min_gni_base 0x%lx min_gni_len 0x%lx\n", "PAT_ENTITY_MEM: amount 0x%lx min_gni_base 0x%lx min_gni_len 0x%lx\n",
pa_pdc_cell.mod[0], pa_pdc_cell.mod[1], pa_pdc_cell->mod[0], pa_pdc_cell->mod[1],
pa_pdc_cell.mod[2]); pa_pdc_cell->mod[2]);
break; break;
case PAT_ENTITY_CA: case PAT_ENTITY_CA:
printk(KERN_DEBUG "PAT_ENTITY_CA: %ld\n", pcell_loc); printk(KERN_DEBUG "PAT_ENTITY_CA: %ld\n", pcell_loc);
...@@ -243,23 +247,26 @@ pat_query_module(ulong pcell_loc, ulong mod_index) ...@@ -243,23 +247,26 @@ pat_query_module(ulong pcell_loc, ulong mod_index)
print_ranges: print_ranges:
pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index, pdc_pat_cell_module(&bytecnt, pcell_loc, mod_index,
IO_VIEW, &io_pdc_cell); IO_VIEW, &io_pdc_cell);
printk(KERN_DEBUG "ranges %ld\n", pa_pdc_cell.mod[1]); printk(KERN_DEBUG "ranges %ld\n", pa_pdc_cell->mod[1]);
for (i = 0; i < pa_pdc_cell.mod[1]; i++) { for (i = 0; i < pa_pdc_cell->mod[1]; i++) {
printk(KERN_DEBUG printk(KERN_DEBUG
" PA_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", " PA_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n",
i, pa_pdc_cell.mod[2 + i * 3], /* type */ i, pa_pdc_cell->mod[2 + i * 3], /* type */
pa_pdc_cell.mod[3 + i * 3], /* start */ pa_pdc_cell->mod[3 + i * 3], /* start */
pa_pdc_cell.mod[4 + i * 3]); /* finish (ie end) */ pa_pdc_cell->mod[4 + i * 3]); /* finish (ie end) */
printk(KERN_DEBUG printk(KERN_DEBUG
" IO_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n", " IO_VIEW %ld: 0x%016lx 0x%016lx 0x%016lx\n",
i, io_pdc_cell.mod[2 + i * 3], /* type */ i, io_pdc_cell->mod[2 + i * 3], /* type */
io_pdc_cell.mod[3 + i * 3], /* start */ io_pdc_cell->mod[3 + i * 3], /* start */
io_pdc_cell.mod[4 + i * 3]); /* finish (ie end) */ io_pdc_cell->mod[4 + i * 3]); /* finish (ie end) */
} }
printk(KERN_DEBUG "\n"); printk(KERN_DEBUG "\n");
break; break;
} }
#endif /* DEBUG_PAT */ #endif /* DEBUG_PAT */
kfree(pa_pdc_cell);
return PDC_OK; return PDC_OK;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册