u-boot/common
Stephen Warren 034eda867f malloc: improve memalign fragmentation fix
Commit 4f144a4164 "malloc: work around some memalign fragmentation
issues" enhanced memalign() so that it can succeed in more cases where
heap fragmentation is present. However, it did not solve as many cases
as it could. This patch enhances the code to cover more cases.

The alignment code works by allocating more space than the user requests,
then adjusting the returned pointer to achieve alignment. In general, one
must allocate "alignment" bytes more than the user requested in order to
guarantee that alignment is possible. This is what the original code does.
The previous enhancement attempted a second allocation if the padded
allocation failed, and succeeded if that allocation just happened to be
aligned; a fluke that happened often in practice. There are still cases
where this could fail, yet where it is still possible to honor the user's
allocation request. In particular, if the heap contains a free region that
is large enough for the user's request, and for leading padding to ensure
alignment, but has no or little space for any trailing padding. In this
case, we can make a third(!) allocation attempt after calculating exactly
the size of the leading padding required to achieve alignment, which is
the minimal over-allocation needed for the overall memalign() operation to
succeed if the third and second allocations end up at the same location.

This patch isn't checkpatch-clean, since it conforms to the existing
coding style in dlmalloc.c, which is different to the rest of U-Boot.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
2016-05-23 11:50:17 -04:00
..
eeprom cmd: eeprom: add support for layout aware commands 2016-05-20 17:02:07 -04:00
init x86: Fix board init breakage 2016-01-15 08:09:46 -05:00
spl Merge git://git.denx.de/u-boot-dm 2016-05-17 13:58:27 -04:00
autoboot.c autoboot.c: Fill env vars in process_fdt_options() only if TEXT_BASE is set 2016-02-05 12:47:20 +08:00
bedbug.c Consolidate bool type 2013-04-01 16:33:52 -04:00
board_f.c x86: Allow use of serial soon after relocation 2016-03-17 10:27:24 +08:00
board_info.c generic-board: allow showing custom board info 2015-08-13 07:19:36 -04:00
board_r.c dm: scsi: Rename CONFIG_CMD_SCSI to CONFIG_SCSI 2016-05-17 09:54:43 -06:00
bootm.c fdt: Allow libfdt to be used in SPL 2016-03-14 19:18:26 -04:00
bootm_os.c VxWorks: fixup MAC address for VxWorks 2015-12-12 15:56:08 -05:00
bootretry.c Rename bootretry functions and remove #ifdefs 2014-05-29 17:49:00 -04:00
bootstage.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
bouncebuf.c Fix a few printf argument verification warnings 2014-09-15 13:32:55 -04:00
cli.c common: cli: Fix typo CONFIG_CMDINE -> CONFIG_CMDLINE 2016-04-04 13:13:07 -04:00
cli_hush.c hush: Add rudimentary support for PS1 and PS2 2016-02-08 10:10:37 -05:00
cli_readline.c spl, common, serial: build SPL without serial support 2015-08-12 20:47:13 -04:00
cli_simple.c common: cli_simple: use strlcpy instead of strcpy 2016-01-13 21:05:26 -05:00
command.c Drop command-processing code when CONFIG_CMDLINE is disabled 2016-04-01 17:17:40 -04:00
console.c debug_uart: Remove duplicated carriage return handling 2016-03-27 09:12:26 -04:00
cros_ec.c cros_ec: Remove unused cros_ec_board_init() function 2015-04-18 11:11:16 -06:00
ddr_spd.c Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
dlmalloc.c malloc: improve memalign fragmentation fix 2016-05-23 11:50:17 -04:00
dlmalloc.src Consolidate bool type 2013-04-01 16:33:52 -04:00
edid.c edid: Add a function to read detailed monitor timings 2015-05-13 09:24:10 -07:00
env_attr.c env: Add regex support to env_attrs 2015-05-21 09:13:19 -04:00
env_callback.c common: env: initialize scalar variable 2016-01-04 12:25:35 -05:00
env_common.c Add option -r to env import to allow import of text files with CRLF as line endings 2014-07-22 07:44:26 -04:00
env_dataflash.c env: Add env_export() wrapper 2014-03-21 16:43:59 -04:00
env_eeprom.c env_eeprom invalidates gd->env_addr by setting it to an offset value 2016-04-11 12:44:37 -04:00
env_embedded.c nand_spl: remove nand_spl infrastructure 2014-06-05 17:01:59 -04:00
env_ext4.c common: Add support for environment file in EXT4. 2016-03-14 14:18:39 -04:00
env_fat.c dm: block: Rename device number member dev to devnum 2016-03-14 15:34:50 -06:00
env_flags.c tools: fix env_flags build 2016-02-15 20:58:25 +00:00
env_flash.c env_flash.c: Drop unused variables 2014-04-17 17:44:36 -04:00
env_mmc.c dm: mmc: Use the new select_hwpart() API 2016-05-17 09:54:43 -06:00
env_nand.c Move ALLOC_CACHE_ALIGN_BUFFER() to the new memalign.h header 2015-09-11 17:15:20 -04:00
env_nowhere.c Coding Style cleanup: remove trailing white space 2013-10-14 16:06:53 -04:00
env_nvram.c env: Add env_export() wrapper 2014-03-21 16:43:59 -04:00
env_onenand.c env: Add env_export() wrapper 2014-03-21 16:43:59 -04:00
env_remote.c Coding Style cleanup: remove trailing white space 2013-10-14 16:06:53 -04:00
env_sata.c common: env: support sata device 2016-04-18 12:29:14 -04:00
env_sf.c common: env_sf: Add exclamation mark 2016-04-01 17:17:43 -04:00
env_ubi.c env_ubi.c: Correct pointer error in env load 2015-11-19 07:32:49 +01:00
exports.c board/ls2085rdb: Export functions for standalone AQ FW load apps 2015-07-20 11:44:37 -07:00
fb_mmc.c dm: block: Adjust device calls to go through helpers function 2016-03-14 15:34:50 -06:00
fb_nand.c sparse: Rename the file and header 2015-11-12 13:18:59 -05:00
fdt_support.c fdt: fix setting MAC addresses for multiple interfaces 2016-05-03 17:52:10 -05:00
flash.c mpc8xx: remove SPD823TS board support 2015-01-05 12:08:51 -05:00
hash.c hash.c: Conditionally compile hash_command, static hash_show 2016-01-13 21:05:08 -05:00
hwconfig.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
ide.c dm: ide: Add support for driver-model block devices 2016-05-17 09:54:43 -06:00
image-android.c image: fix support for Android boot images with no ramdisk 2015-10-11 17:12:10 -04:00
image-fdt.c efi_loader: Call fdt preparation functions 2016-03-15 21:30:14 -04:00
image-fit.c common: image-fit: Fix load and entry addresses in FIT image 2016-03-14 19:18:41 -04:00
image-sig.c image: Convert to use fdt_for_each_subnode macro 2015-02-16 12:41:41 -05:00
image-sparse.c fastboot: sparse: remove unnecessary logging 2016-04-11 20:48:29 -04:00
image.c image: Add functions to obtain short names 2016-03-14 19:18:28 -04:00
iomux.c Move console definitions into a new console.h file 2015-11-19 20:27:50 -07:00
iotrace.c common: Make sure arch-specific map_sysmem() is defined 2015-04-18 11:11:09 -06:00
kallsyms.c Add support for Linux-like kallsysms 2009-06-12 20:45:48 +02:00
Kconfig Move all command code into its own directory 2016-01-25 10:39:43 -05:00
kgdb.c Fix spelling of "occurred". 2016-05-02 18:37:09 -04:00
kgdb_stubs.c Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
lcd.c lcd: Fix compile warning in 64bit mode 2016-03-27 09:12:17 -04:00
lcd_console.c common/lcd_console: introduce display/framebuffer rotation 2015-04-18 17:40:37 +02:00
lcd_console_rotation.c common/lcd_console: introduce display/framebuffer rotation 2015-04-18 17:40:37 +02:00
lcd_simplefb.c common/lcd_simplefb: Add support for 32bit organized framebuffers 2015-07-23 18:10:58 +02:00
lynxkdi.c checkpatch whitespace cleanups 2011-10-22 01:13:35 +02:00
main.c Panic when no command line processing can be performed 2016-03-22 12:16:10 -04:00
Makefile cmd: eeprom: add support for layout aware commands 2016-05-20 17:02:07 -04:00
malloc_simple.c malloc_simple: Add a little more debugging 2016-03-17 10:27:23 +08:00
memsize.c Revert "common/memsize.c: Simplify RAM size detection" 2016-02-10 08:34:42 -05:00
menu.c Fix typo choosen in comments and printf logs 2016-03-27 09:12:23 -04:00
miiphyutil.c common: miiphyutil: avoid memory leak 2015-12-05 18:22:24 -05:00
s_record.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
sata.c dm: sata: Add support for driver-model block devices 2016-05-17 09:54:43 -06:00
scsi.c dm: scsi: Add support for driver-model block devices 2016-05-17 09:54:43 -06:00
splash.c lcd: split splash code into its own function 2015-02-10 13:31:58 +01:00
splash_source.c splash_source: add support for filesystem formatted sata 2015-11-16 12:01:35 +01:00
stdio.c stdio: Correct a build error with driver model 2016-01-21 20:42:36 -07:00
system_map.c Add support for Linux-like kallsysms 2009-06-12 20:45:48 +02:00
update.c update: tftp: dfu: Extend update_tftp() function to support DFU 2015-09-07 13:41:05 +02:00
usb.c usb: Assure Get Descriptor request is in separate microframe 2016-05-06 20:06:56 +02:00
usb_hub.c usb: hub: Don't continue on get_port_status failure 2016-05-06 20:06:56 +02:00
usb_kbd.c usb: kbd: Do not deregister usbkbd twice when using dm 2016-04-10 17:18:42 +02:00
usb_storage.c dm: blk: Add a easier way to create a named block device 2016-05-17 09:54:43 -06:00
xyzModem.c lib/crc16.c: Rename cyg_crc16() to crc16_ccitt() and add crc start value 2016-03-14 19:18:42 -04:00