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
signature.asc
Description: This is a digitally signed message part
_______________________________________________ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg