Messages in this thread | | | Subject | Re: [PATCH 2.6.31] ehca: Tolerate dynamic memory operations and huge pages | From | Michael Ellerman <> | Date | Wed, 10 Jun 2009 10:02:36 +1000 |
| |
On Tue, 2009-06-09 at 15:59 +0200, Hannes Hering wrote: > This patch implements toleration of dynamic memory operations and 16 GB > gigantic pages. On module load the driver walks through available system > memory, checks for available memory ranges and then registers the kernel > internal memory region accordingly. The translation of address ranges is > implemented via a 3-level busmap.
Hi Hannes,
For those of us who haven't read the HEA spec lately, can you give us some more detail on that? :)
How does it interact with kexec/kdump?
> +static int ehca_update_busmap(unsigned long pfn, unsigned long nr_pages) > +{ > + unsigned long i, start_section, end_section; > + int top, dir, idx; > + > + if (!nr_pages) > + return 0; > + > + if (!ehca_bmap) { > + ehca_bmap = kmalloc(sizeof(struct ehca_bmap), GFP_KERNEL); > + if (!ehca_bmap) > + return -ENOMEM; > + /* Set map block to 0xFF according to EHCA_INVAL_ADDR */ > + memset(ehca_bmap, 0xFF, EHCA_TOP_MAP_SIZE); > + } > + > + start_section = phys_to_abs(pfn * PAGE_SIZE) / EHCA_SECTSIZE; > + end_section = phys_to_abs((pfn + nr_pages) * PAGE_SIZE) / EHCA_SECTSIZE;
phys_to_abs() ? As below, or does it come from somewhere else?
arch/powerpc/include/asm/abs_addr.h: 47 static inline unsigned long phys_to_abs(unsigned long pa) 48 { 49 unsigned long chunk; 50 51 /* This is a no-op on non-iSeries */ 52 if (!firmware_has_feature(FW_FEATURE_ISERIES)) 53 return pa; 54 55 chunk = addr_to_chunk(pa); 56 57 if (chunk < mschunks_map.num_chunks) 58 chunk = mschunks_map.mapping[chunk]; 59 60 return chunk_to_addr(chunk) + (pa & MSCHUNKS_OFFSET_MASK); 61 }
cheers [unhandled content-type:application/pgp-signature] | |