[RFC PATCH 2/4] makedumpfile: Add partial bitmap for cyclic.

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Tue Jun 5 00:57:40 EDT 2012


Hello Nishimura-san,

On Thu, 31 May 2012 17:33:07 +0900
Daisuke Nishimura <nishimura at mxp.nes.nec.co.jp> wrote:

> From the POV of adding partial bitmaps, I think it would be better to include
> following hunks in [3/4] into [2/4].

The functions below are just initializer for partial bitmaps, so it may be better
to include them in [2/4] as you said. Thank you for your advice.


Thanks
Atsushi Kumagai

> > @@ -3954,6 +4019,39 @@ prepare_bitmap_buffer(void)
> >  	return TRUE;
> >  }
> >  
> > +int
> > +prepare_bitmap_buffer_cyclic(void)
> > +{
> > +	unsigned long tmp;
> > +
> > +	/*
> > +	 * Create 2 bitmaps (1st-bitmap & 2nd-bitmap) on block_size boundary.
> > +	 * The crash utility requires both of them to be aligned to block_size
> > +	 * boundary.
> > +	 */
> > +	tmp = divideup(divideup(info->max_mapnr, BITPERBYTE), info->page_size);
> > +	info->len_bitmap = tmp*info->page_size*2;
> > +
> > +
> > +	/*
> > +	 * Prepare bitmap buffers for creating dump bitmap.
> > +	 */
> > +	if ((info->partial_bitmap1 = (char *)malloc(BUFSIZE_CYCLIC)) == NULL) {
> > +		ERRMSG("Can't allocate memory for the 1st-bitmap. %s\n",
> > +		       strerror(errno));
> > +		return FALSE;
> > +	}
> > +	if ((info->partial_bitmap2 = (char *)malloc(BUFSIZE_CYCLIC)) == NULL) {
> > +		ERRMSG("Can't allocate memory for the 2nd-bitmap. %s\n",
> > +		       strerror(errno));
> > +		return FALSE;
> > +	}
> > +	initialize_bitmap_cyclic(info->partial_bitmap1);
> > +	initialize_bitmap_cyclic(info->partial_bitmap2);
> > +
> > +	return TRUE;
> > +}
> > +
> >  void
> >  free_bitmap_buffer(void)
> >  {
> > @@ -3974,14 +4072,17 @@ create_dump_bitmap(void)
> >  {
> >  	int ret = FALSE;
> >  
> > -	if (!prepare_bitmap_buffer())
> > -		goto out;
> > -
> > -	if (!create_1st_bitmap())
> > -		goto out;
> > -
> > -	if (!create_2nd_bitmap())
> > -		goto out;
> > +	if (info->flag_cyclic) {
> > +		if (!prepare_bitmap_buffer_cyclic())
> > +			goto out;
> > +	} else {
> > +		if (!prepare_bitmap_buffer())
> > +			goto out;
> > +		if (!create_1st_bitmap())
> > +			goto out;
> > +		if (!create_2nd_bitmap())
> > +			goto out;
> > +	}
> >  
> >  	ret = TRUE;
> >  out:
> ...
> > @@ -7242,6 +7364,10 @@ out:
> >  			free(info->splitting_info);
> >  		if (info->p2m_mfn_frame_list != NULL)
> >  			free(info->p2m_mfn_frame_list);
> > +		if (info->partial_bitmap1 != NULL)
> > +			free(info->partial_bitmap1);
> > +		if (info->partial_bitmap2 != NULL)
> > +			free(info->partial_bitmap2);
> >  		free(info);
> >  	}
> >  	free_elf_info();
> 
> Thanks,
> Daisuke Nishimura.



More information about the kexec mailing list