* refs/heads/tmp-8ec9fd8
ANDROID: sdcardfs: Check stacked filesystem depth
Fix backport of "tcp: detect malicious patterns in tcp_collapse_ofo_queue()"
tcp: detect malicious patterns in tcp_collapse_ofo_queue()
tcp: avoid collapses in tcp_prune_queue() if possible
x86_64_cuttlefish_defconfig: Enable android-verity
x86_64_cuttlefish_defconfig: enable verity cert
Linux 4.4.142
perf tools: Move syscall number fallbacks from perf-sys.h to tools/arch/x86/include/asm/
x86/cpu: Probe CPUID leaf 6 even when cpuid_level == 6
Kbuild: fix # escaping in .cmd files for future Make
ANDROID: Fix massive cpufreq_times memory leaks
ANDROID: Reduce use of #ifdef CONFIG_CPU_FREQ_TIMES
UPSTREAM: binder: replace "%p" with "%pK"
UPSTREAM: binder: free memory on error
UPSTREAM: binder: fix proc->files use-after-free
UPSTREAM: Revert "FROMLIST: binder: fix proc->files use-after-free"
UPSTREAM: ANDROID: binder: change down_write to down_read
UPSTREAM: ANDROID: binder: correct the cmd print for BINDER_WORK_RETURN_ERROR
UPSTREAM: ANDROID: binder: remove 32-bit binder interface.
UPSTREAM: ANDROID: binder: re-order some conditions
UPSTREAM: android: binder: use VM_ALLOC to get vm area
UPSTREAM: android: binder: Use true and false for boolean values
UPSTREAM: android: binder: Use octal permissions
UPSTREAM: android: binder: Prefer __func__ to using hardcoded function name
UPSTREAM: ANDROID: binder: make binder_alloc_new_buf_locked static and indent its arguments
UPSTREAM: android: binder: Check for errors in binder_alloc_shrinker_init().
treewide: Use array_size in f2fs_kvzalloc()
treewide: Use array_size() in f2fs_kzalloc()
treewide: Use array_size() in f2fs_kmalloc()
overflow.h: Add allocation size calculation helpers
f2fs: fix to clear FI_VOLATILE_FILE correctly
f2fs: let sync node IO interrupt async one
f2fs: don't change wbc->sync_mode
f2fs: fix to update mtime correctly
fs: f2fs: insert space around that ':' and ', '
fs: f2fs: add missing blank lines after declarations
fs: f2fs: changed variable type of offset "unsigned" to "loff_t"
f2fs: clean up symbol namespace
f2fs: make set_de_type() static
f2fs: make __f2fs_write_data_pages() static
f2fs: fix to avoid accessing cross the boundary
f2fs: fix to let caller retry allocating block address
disable loading f2fs module on PAGE_SIZE > 4KB
f2fs: fix error path of move_data_page
f2fs: don't drop dentry pages after fs shutdown
f2fs: fix to avoid race during access gc_thread pointer
f2fs: clean up with clear_radix_tree_dirty_tag
f2fs: fix to don't trigger writeback during recovery
f2fs: clear discard_wake earlier
f2fs: let discard thread wait a little longer if dev is busy
f2fs: avoid stucking GC due to atomic write
f2fs: introduce sbi->gc_mode to determine the policy
f2fs: keep migration IO order in LFS mode
f2fs: fix to wait page writeback during revoking atomic write
f2fs: Fix deadlock in shutdown ioctl
f2fs: detect synchronous writeback more earlier
mm: remove nr_pages argument from pagevec_lookup_{,range}_tag()
ceph: use pagevec_lookup_range_nr_tag()
mm: add variant of pagevec_lookup_range_tag() taking number of pages
mm: use pagevec_lookup_range_tag() in write_cache_pages()
mm: use pagevec_lookup_range_tag() in __filemap_fdatawait_range()
nilfs2: use pagevec_lookup_range_tag()
gfs2: use pagevec_lookup_range_tag()
f2fs: use find_get_pages_tag() for looking up single page
f2fs: simplify page iteration loops
f2fs: use pagevec_lookup_range_tag()
ext4: use pagevec_lookup_range_tag()
ceph: use pagevec_lookup_range_tag()
btrfs: use pagevec_lookup_range_tag()
mm: implement find_get_pages_range_tag()
f2fs: clean up with is_valid_blkaddr()
f2fs: fix to initialize min_mtime with ULLONG_MAX
f2fs: fix to let checkpoint guarantee atomic page persistence
f2fs: fix to initialize i_current_depth according to inode type
Revert "f2fs: add ovp valid_blocks check for bg gc victim to fg_gc"
f2fs: don't drop any page on f2fs_cp_error() case
f2fs: fix spelling mistake: "extenstion" -> "extension"
f2fs: enhance sanity_check_raw_super() to avoid potential overflows
f2fs: treat volatile file's data as hot one
f2fs: introduce release_discard_addr() for cleanup
f2fs: fix potential overflow
f2fs: rename dio_rwsem to i_gc_rwsem
f2fs: move mnt_want_write_file after range check
f2fs: fix missing clear FI_NO_PREALLOC in some error case
f2fs: enforce fsync_mode=strict for renamed directory
f2fs: sanity check for total valid node blocks
f2fs: sanity check on sit entry
f2fs: avoid bug_on on corrupted inode
f2fs: give message and set need_fsck given broken node id
f2fs: clean up commit_inmem_pages()
f2fs: do not check F2FS_INLINE_DOTS in recover
f2fs: remove duplicated dquot_initialize and fix error handling
f2fs: stop issue discard if something wrong with f2fs
f2fs: fix return value in f2fs_ioc_commit_atomic_write
f2fs: allocate hot_data for atomic write more strictly
f2fs: check if inmem_pages list is empty correctly
f2fs: fix race in between GC and atomic open
f2fs: change le32 to le16 of f2fs_inode->i_extra_size
f2fs: check cur_valid_map_mir & raw_sit block count when flush sit entries
f2fs: correct return value of f2fs_trim_fs
f2fs: fix to show missing bits in FS_IOC_GETFLAGS
f2fs: remove unneeded F2FS_PROJINHERIT_FL
f2fs: don't use GFP_ZERO for page caches
f2fs: issue all big range discards in umount process
f2fs: remove redundant block plug
f2fs: remove unmatched zero_user_segment when convert inline dentry
f2fs: introduce private inode status mapping
fscrypt: log the crypto algorithm implementations
crypto: api - Add crypto_type_has_alg helper
crypto: skcipher - Add low-level skcipher interface
crypto: skcipher - Add helper to retrieve driver name
crypto: skcipher - Add default key size helper
fscrypt: add Speck128/256 support
fscrypt: only derive the needed portion of the key
fscrypt: separate key lookup from key derivation
fscrypt: use a common logging function
fscrypt: remove internal key size constants
fscrypt: remove unnecessary check for non-logon key type
fscrypt: make fscrypt_operations.max_namelen an integer
fscrypt: drop empty name check from fname_decrypt()
fscrypt: drop max_namelen check from fname_decrypt()
fscrypt: don't special-case EOPNOTSUPP from fscrypt_get_encryption_info()
fscrypt: don't clear flags on crypto transform
fscrypt: remove stale comment from fscrypt_d_revalidate()
fscrypt: remove error messages for skcipher_request_alloc() failure
fscrypt: remove unnecessary NULL check when allocating skcipher
fscrypt: clean up after fscrypt_prepare_lookup() conversions
fscrypt: use unbound workqueue for decryption
f2fs: run fstrim asynchronously if runtime discard is on
f2fs: turn down IO priority of discard from background
f2fs: don't split checkpoint in fstrim
f2fs: issue discard commands proactively in high fs utilization
f2fs: add fsync_mode=nobarrier for non-atomic files
f2fs: let fstrim issue discard commands in lower priority
f2fs: avoid fsync() failure caused by EAGAIN in writepage()
f2fs: clear PageError on writepage - part 2
f2fs: check cap_resource only for data blocks
Revert "f2fs: introduce f2fs_set_page_dirty_nobuffer"
f2fs: clear PageError on writepage
f2fs: call unlock_new_inode() before d_instantiate()
f2fs: refactor read path to allow multiple postprocessing steps
fscrypt: allow synchronous bio decryption
f2fs: remain written times to update inode during fsync
f2fs: make assignment of t->dentry_bitmap more readable
f2fs: truncate preallocated blocks in error case
f2fs: fix a wrong condition in f2fs_skip_inode_update
f2fs: reserve bits for fs-verity
f2fs: Add a segment type check in inplace write
f2fs: no need to initialize zero value for GFP_F2FS_ZERO
f2fs: don't track new nat entry in nat set
f2fs: clean up with F2FS_BLK_ALIGN
f2fs: check blkaddr more accuratly before issue a bio
f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read
f2fs: introduce a new mount option test_dummy_encryption
f2fs: introduce F2FS_FEATURE_LOST_FOUND feature
f2fs: release locks before return in f2fs_ioc_gc_range()
f2fs: align memory boundary for bitops
f2fs: remove unneeded set_cold_node()
f2fs: add nowait aio support
f2fs: wrap all options with f2fs_sb_info.mount_opt
f2fs: Don't overwrite all types of node to keep node chain
f2fs: introduce mount option for fsync mode
f2fs: fix to restore old mount option in ->remount_fs
f2fs: wrap sb_rdonly with f2fs_readonly
f2fs: avoid selinux denial on CAP_SYS_RESOURCE
f2fs: support hot file extension
f2fs: fix to avoid race in between atomic write and background GC
f2fs: do gc in greedy mode for whole range if gc_urgent mode is set
f2fs: issue discard aggressively in the gc_urgent mode
f2fs: set readdir_ra by default
f2fs: add auto tuning for small devices
f2fs: add mount option for segment allocation policy
f2fs: don't stop GC if GC is contended
f2fs: expose extension_list sysfs entry
f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range
f2fs: introduce sb_lock to make encrypt pwsalt update exclusive
f2fs: remove redundant initialization of pointer 'p'
f2fs: flush cp pack except cp pack 2 page at first
f2fs: clean up f2fs_sb_has_xxx functions
f2fs: remove redundant check of page type when submit bio
f2fs: fix to handle looped node chain during recovery
f2fs: handle quota for orphan inodes
f2fs: support passing down write hints to block layer with F2FS policy
f2fs: support passing down write hints given by users to block layer
f2fs: fix to clear CP_TRIMMED_FLAG
f2fs: support large nat bitmap
f2fs: fix to check extent cache in f2fs_drop_extent_tree
f2fs: restrict inline_xattr_size configuration
f2fs: fix heap mode to reset it back
f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET
fscrypt: fix build with pre-4.6 gcc versions
fscrypt: fix up fscrypt_fname_encrypted_size() for internal use
fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names
fscrypt: calculate NUL-padding length in one place only
fscrypt: move fscrypt_symlink_data to fscrypt_private.h
fscrypt: remove fscrypt_fname_usr_to_disk()
f2fs: switch to fscrypt_get_symlink()
f2fs: switch to fscrypt ->symlink() helper functions
fscrypt: new helper function - fscrypt_get_symlink()
fscrypt: new helper functions for ->symlink()
fscrypt: trim down fscrypt.h includes
fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c
fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h
fscrypt: move fscrypt_operations declaration to fscrypt_supp.h
fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions
fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h
fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h
fscrypt: move fscrypt_control_page() to supp/notsupp headers
fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers
f2fs: don't put dentry page in pagecache into highmem
f2fs: support inode creation time
f2fs: rebuild sit page from sit info in mem
f2fs: stop issuing discard if fs is readonly
f2fs: clean up duplicated assignment in init_discard_policy
f2fs: use GFP_F2FS_ZERO for cleanup
f2fs: allow to recover node blocks given updated checkpoint
f2fs: recover some i_inline flags
f2fs: correct removexattr behavior for null valued extended attribute
f2fs: drop page cache after fs shutdown
f2fs: stop gc/discard thread after fs shutdown
f2fs: hanlde error case in f2fs_ioc_shutdown
f2fs: split need_inplace_update
f2fs: fix to update last_disk_size correctly
f2fs: kill F2FS_INLINE_XATTR_ADDRS for cleanup
f2fs: clean up error path of fill_super
f2fs: avoid hungtask when GC encrypted block if io_bits is set
f2fs: allow quota to use reserved blocks
f2fs: fix to drop all inmem pages correctly
f2fs: speed up defragment on sparse file
f2fs: support F2FS_IOC_PRECACHE_EXTENTS
f2fs: add an ioctl to disable GC for specific file
f2fs: prevent newly created inode from being dirtied incorrectly
f2fs: support FIEMAP_FLAG_XATTR
f2fs: fix to cover f2fs_inline_data_fiemap with inode_lock
f2fs: check node page again in write end io
f2fs: fix to caclulate required free section correctly
f2fs: handle newly created page when revoking inmem pages
f2fs: add resgid and resuid to reserve root blocks
f2fs: implement cgroup writeback support
f2fs: remove unused pend_list_tag
f2fs: avoid high cpu usage in discard thread
f2fs: make local functions static
f2fs: add reserved blocks for root user
f2fs: check segment type in __f2fs_replace_block
f2fs: update inode info to inode page for new file
f2fs: show precise # of blocks that user/root can use
f2fs: clean up unneeded declaration
f2fs: continue to do direct IO if we only preallocate partial blocks
f2fs: enable quota at remount from r to w
f2fs: skip stop_checkpoint for user data writes
f2fs: fix missing error number for xattr operation
f2fs: recover directory operations by fsync
f2fs: return error during fill_super
f2fs: fix an error case of missing update inode page
f2fs: fix potential hangtask in f2fs_trace_pid
f2fs: no need return value in restore summary process
f2fs: use unlikely for release case
f2fs: don't return value in truncate_data_blocks_range
f2fs: clean up f2fs_map_blocks
f2fs: clean up hash codes
f2fs: fix error handling in fill_super
f2fs: spread f2fs_k{m,z}alloc
f2fs: inject fault to kvmalloc
f2fs: inject fault to kzalloc
f2fs: remove a redundant conditional expression
f2fs: apply write hints to select the type of segment for direct write
f2fs: switch to fscrypt_prepare_setattr()
f2fs: switch to fscrypt_prepare_lookup()
f2fs: switch to fscrypt_prepare_rename()
f2fs: switch to fscrypt_prepare_link()
f2fs: switch to fscrypt_file_open()
f2fs: remove repeated f2fs_bug_on
f2fs: remove an excess variable
f2fs: fix lock dependency in between dio_rwsem & i_mmap_sem
f2fs: remove unused parameter
f2fs: still write data if preallocate only partial blocks
f2fs: introduce sysfs readdir_ra to readahead inode block in readdir
f2fs: fix concurrent problem for updating free bitmap
f2fs: remove unneeded memory footprint accounting
f2fs: no need to read nat block if nat_block_bitmap is set
f2fs: reserve nid resource for quota sysfile
fscrypt: resolve some cherry-pick bugs
fscrypt: move to generic async completion
crypto: introduce crypto wait for async op
fscrypt: lock mutex before checking for bounce page pool
fscrypt: new helper function - fscrypt_prepare_setattr()
fscrypt: new helper function - fscrypt_prepare_lookup()
fscrypt: new helper function - fscrypt_prepare_rename()
fscrypt: new helper function - fscrypt_prepare_link()
fscrypt: new helper function - fscrypt_file_open()
fscrypt: new helper function - fscrypt_require_key()
fscrypt: remove unneeded empty fscrypt_operations structs
fscrypt: remove ->is_encrypted()
fscrypt: switch from ->is_encrypted() to IS_ENCRYPTED()
fs, fscrypt: add an S_ENCRYPTED inode flag
fscrypt: clean up include file mess
fscrypt: fix dereference of NULL user_key_payload
fscrypt: make ->dummy_context() return bool
f2fs: deny accessing encryption policy if encryption is off
f2fs: inject fault in inc_valid_node_count
f2fs: fix to clear FI_NO_PREALLOC
f2fs: expose quota information in debugfs
f2fs: separate nat entry mem alloc from nat_tree_lock
f2fs: validate before set/clear free nat bitmap
f2fs: avoid opened loop codes in __add_ino_entry
f2fs: apply write hints to select the type of segments for buffered write
f2fs: introduce scan_curseg_cache for cleanup
f2fs: optimize the way of traversing free_nid_bitmap
f2fs: keep scanning until enough free nids are acquired
f2fs: trace checkpoint reason in fsync()
f2fs: keep isize once block is reserved cross EOF
f2fs: avoid race in between GC and block exchange
f2fs: save a multiplication for last_nid calculation
f2fs: fix summary info corruption
f2fs: remove dead code in update_meta_page
f2fs: remove unneeded semicolon
f2fs: don't bother with inode->i_version
f2fs: check curseg space before foreground GC
f2fs: use rw_semaphore to protect SIT cache
f2fs: support quota sys files
f2fs: add quota_ino feature infra
f2fs: optimize __update_nat_bits
f2fs: modify for accurate fggc node io stat
Revert "f2fs: handle dirty segments inside refresh_sit_entry"
f2fs: add a function to move nid
f2fs: export SSR allocation threshold
f2fs: give correct trimmed blocks in fstrim
f2fs: support bio allocation error injection
f2fs: support get_page error injection
f2fs: add missing sysfs description
f2fs: support soft block reservation
f2fs: handle error case when adding xattr entry
f2fs: support flexible inline xattr size
f2fs: show current cp state
f2fs: add missing quota_initialize
f2fs: show # of dirty segments via sysfs
f2fs: stop all the operations by cp_error flag
f2fs: remove several redundant assignments
f2fs: avoid using timespec
f2fs: fix to correct no_fggc_candidate
Revert "f2fs: return wrong error number on f2fs_quota_write"
f2fs: remove obsolete pointer for truncate_xattr_node
f2fs: retry ENOMEM for quota_read|write
f2fs: limit # of inmemory pages
f2fs: update ctx->pos correctly when hitting hole in directory
f2fs: relocate readahead codes in readdir()
f2fs: allow readdir() to be interrupted
f2fs: trace f2fs_readdir
f2fs: trace f2fs_lookup
f2fs: skip searching non-exist range in truncate_hole
f2fs: expose some sectors to user in inline data or dentry case
f2fs: avoid stale fi->gdirty_list pointer
f2fs/crypto: drop crypto key at evict_inode only
f2fs: fix to avoid race when accessing last_disk_size
f2fs: Fix bool initialization/comparison
f2fs: give up CP_TRIMMED_FLAG if it drops discards
f2fs: trace f2fs_remove_discard
f2fs: reduce cmd_lock coverage in __issue_discard_cmd
f2fs: split discard policy
f2fs: wrap discard policy
f2fs: support issuing/waiting discard in range
f2fs: fix to flush multiple device in checkpoint
f2fs: enhance multiple device flush
f2fs: fix to show ino management cache size correctly
f2fs: drop FI_UPDATE_WRITE tag after f2fs_issue_flush
f2fs: obsolete ALLOC_NID_LIST list
f2fs: convert inline data for direct I/O & FI_NO_PREALLOC
f2fs: allow readpages with NULL file pointer
f2fs: show flush list status in sysfs
f2fs: introduce read_xattr_block
f2fs: introduce read_inline_xattr
Revert "f2fs: reuse nids more aggressively"
Revert "f2fs: node segment is prior to data segment selected victim"
f2fs: fix potential panic during fstrim
f2fs: hurry up to issue discard after io interruption
f2fs: fix to show correct discard_granularity in sysfs
f2fs: detect dirty inode in evict_inode
f2fs: clear radix tree dirty tag of pages whose dirty flag is cleared
f2fs: speed up gc_urgent mode with SSR
f2fs: better to wait for fstrim completion
f2fs: avoid race in between read xattr & write xattr
f2fs: make get_lock_data_page to handle encrypted inode
f2fs: use generic terms used for encrypted block management
f2fs: introduce f2fs_encrypted_file for clean-up
Revert "f2fs: add a new function get_ssr_cost"
f2fs: constify super_operations
f2fs: fix to wake up all sleeping flusher
f2fs: avoid race in between atomic_read & atomic_inc
f2fs: remove unneeded parameter of change_curseg
f2fs: update i_flags correctly
f2fs: don't check inode's checksum if it was dirtied or writebacked
f2fs: don't need to update inode checksum for recovery
f2fs: trigger fdatasync for non-atomic_write file
f2fs: fix to avoid race in between aio and gc
f2fs: wake up discard_thread iff there is a candidate
f2fs: return error when accessing insane flie offset
f2fs: trigger normal fsync for non-atomic_write file
f2fs: clear FI_HOT_DATA correctly
f2fs: fix out-of-order execution in f2fs_issue_flush
f2fs: issue discard commands if gc_urgent is set
f2fs: introduce discard_granularity sysfs entry
f2fs: remove unused function overprovision_sections
f2fs: check hot_data for roll-forward recovery
f2fs: add tracepoint for f2fs_gc
f2fs: retry to revoke atomic commit in -ENOMEM case
f2fs: let fill_super handle roll-forward errors
f2fs: merge equivalent flags F2FS_GET_BLOCK_[READ|DIO]
f2fs: support journalled quota
f2fs: fix potential overflow when adjusting GC cycle
f2fs: avoid unneeded sync on quota file
f2fs: introduce gc_urgent mode for background GC
f2fs: use IPU for cold files
f2fs: fix the size value in __check_sit_bitmap
f2fs: add app/fs io stat
f2fs: do not change the valid_block value if cur_valid_map was wrongly set or cleared
f2fs: update cur_valid_map_mir together with cur_valid_map
f2fs: use printk_ratelimited for f2fs_msg
f2fs: expose features to sysfs entry
f2fs: support inode checksum
f2fs: return wrong error number on f2fs_quota_write
f2fs: provide f2fs_balance_fs to __write_node_page
f2fs: introduce f2fs_statfs_project
f2fs: don't need to wait for node writes for atomic write
f2fs: avoid naming confusion of sysfs init
f2fs: support project quota
f2fs: record quota during dot{,dot} recovery
f2fs: enhance on-disk inode structure scalability
f2fs: make max inline size changeable
f2fs: add ioctl to expose current features
f2fs: make background threads of f2fs being aware of freezing
f2fs: don't give partially written atomic data from process crash
f2fs: give a try to do atomic write in -ENOMEM case
f2fs: preserve i_mode if __f2fs_set_acl() fails
f2fs: alloc new nids for xattr block in recovery
f2fs: spread struct f2fs_dentry_ptr for inline path
f2fs: remove unused input parameter
f2fs: avoid cpu lockup
f2fs: include seq_file.h for sysfs.c
f2fs: Don't clear SGID when inheriting ACLs
f2fs: remove extra inode_unlock() in error path
fscrypt: add support for AES-128-CBC
fscrypt: inline fscrypt_free_filename()
f2fs: make more close to v4.13-rc1
f2fs: support plain user/group quota
f2fs: avoid deadlock caused by lock order of page and lock_op
f2fs: use spin_{,un}lock_irq{save,restore}
f2fs: relax migratepage for atomic written page
f2fs: don't count inode block in in-memory inode.i_blocks
Revert "f2fs: fix to clean previous mount option when remount_fs"
f2fs: do not set LOST_PINO for renamed dir
f2fs: do not set LOST_PINO for newly created dir
f2fs: skip ->writepages for {mete,node}_inode during recovery
f2fs: introduce __check_sit_bitmap
f2fs: stop gc/discard thread in prior during umount
f2fs: introduce reserved_blocks in sysfs
f2fs: avoid redundant f2fs_flush after remount
f2fs: report # of free inodes more precisely
f2fs: add ioctl to do gc with target block address
f2fs: don't need to check encrypted inode for partial truncation
f2fs: measure inode.i_blocks as generic filesystem
f2fs: set CP_TRIMMED_FLAG correctly
f2fs: require key for truncate(2) of encrypted file
f2fs: move sysfs code from super.c to fs/f2fs/sysfs.c
f2fs: clean up sysfs codes
f2fs: fix wrong error number of fill_super
f2fs: fix to show injection rate in ->show_options
f2fs: Fix a return value in case of error in 'f2fs_fill_super'
f2fs: use proper variable name
f2fs: fix to avoid panic when encountering corrupt node
f2fs: don't track newly allocated nat entry in list
f2fs: add f2fs_bug_on in __remove_discard_cmd
f2fs: introduce __wait_one_discard_bio
f2fs: dax: fix races between page faults and truncating pages
f2fs: simplify the way of calulating next nat address
f2fs: sanity check size of nat and sit cache
f2fs: fix a panic caused by NULL flush_cmd_control
f2fs: remove the unnecessary cast for PTR_ERR
f2fs: remove false-positive bug_on
f2fs: Do not issue small discards in LFS mode
f2fs: don't bother checking for encryption key in ->write_iter()
f2fs: don't bother checking for encryption key in ->mmap()
f2fs: wait discard IO completion without cmd_lock held
f2fs: wake up all waiters in f2fs_submit_discard_endio
f2fs: show more info if fail to issue discard
f2fs: introduce io_list for serialize data/node IOs
f2fs: split wio_mutex
f2fs: combine huge num of discard rb tree consistence checks
f2fs: fix a bug caused by NULL extent tree
f2fs: try to freeze in gc and discard threads
f2fs: add a new function get_ssr_cost
f2fs: declare load_free_nid_bitmap static
f2fs: avoid f2fs_lock_op for IPU writes
f2fs: split bio cache
f2fs: use fio instead of multiple parameters
f2fs: remove unnecessary read cases in merged IO flow
f2fs: use f2fs_submit_page_bio for ra_meta_pages
f2fs: make sure f2fs_gc returns consistent errno
f2fs: load inode's flag from disk
f2fs: sanity check checkpoint segno and blkoff
f2fs, block_dump: give WRITE direction to submit_bio
fscrypt: correct collision claim for digested names
f2fs: switch to using fscrypt_match_name()
fscrypt: introduce helper function for filename matching
fscrypt: fix context consistency check when key(s) unavailable
fscrypt: Move key structure and constants to uapi
fscrypt: remove fscrypt_symlink_data_len()
fscrypt: remove unnecessary checks for NULL operations
fscrypt: eliminate ->prepare_context() operation
fscrypt: remove broken support for detecting keyring key revocation
fscrypt: avoid collisions when presenting long encrypted filenames
f2fs: check entire encrypted bigname when finding a dentry
f2fs: sync f2fs_lookup() with ext4_lookup()
f2fs: fix a mount fail for wrong next_scan_nid
f2fs: relocate inode_{,un}lock in F2FS_IOC_SETFLAGS
f2fs: show available_nids in f2fs/status
f2fs: flush dirty nats periodically
f2fs: introduce CP_TRIMMED_FLAG to avoid unneeded discard
f2fs: allow cpc->reason to indicate more than one reason
f2fs: release cp and dnode lock before IPU
f2fs: shrink size of struct discard_cmd
f2fs: don't hold cmd_lock during waiting discard command
f2fs: nullify fio->encrypted_page for each writes
f2fs: sanity check segment count
f2fs: introduce valid_ipu_blkaddr to clean up
f2fs: lookup extent cache first under IPU scenario
f2fs: reconstruct code to write a data page
f2fs: introduce __wait_discard_cmd
f2fs: introduce __issue_discard_cmd
f2fs: enable small discard by default
f2fs: delay awaking discard thread
f2fs: seperate read nat page from nat_tree_lock
f2fs: fix multiple f2fs_add_link() having same name for inline dentry
f2fs: skip encrypted inode in ASYNC IPU policy
f2fs: fix out-of free segments
f2fs: improve definition of statistic macros
f2fs: assign allocation hint for warm/cold data
f2fs: fix _IOW usage
f2fs: add ioctl to flush data from faster device to cold area
f2fs: introduce async IPU policy
f2fs: add undiscard blocks stat
f2fs: unlock cp_rwsem early for IPU writes
f2fs: introduce __check_rb_tree_consistence
f2fs: trace __submit_discard_cmd
f2fs: in prior to issue big discard
f2fs: clean up discard_cmd_control structure
f2fs: use rb-tree to track pending discard commands
f2fs: avoid dirty node pages in check_only recovery
f2fs: fix not to set fsync/dentry mark
f2fs: allocate hot_data for atomic writes
f2fs: give time to flush dirty pages for checkpoint
f2fs: fix fs corruption due to zero inode page
f2fs: shrink blk plug region
f2fs: extract rb-tree operation infrastructure
f2fs: avoid frequent checkpoint during f2fs_gc
f2fs: clean up some macros in terms of GET_SEGNO
f2fs: clean up get_valid_blocks with consistent parameter
f2fs: use segment number for get_valid_blocks
f2fs: guard macro variables with braces
f2fs: fix comment on f2fs_flush_merged_bios() after 86531d6b
f2fs: prevent waiter encountering incorrect discard states
f2fs: introduce f2fs_wait_discard_bios
f2fs: split discard_cmd_list
Revert "f2fs: put allocate_segment after refresh_sit_entry"
f2fs: split make_dentry_ptr() into block and inline versions
f2fs: submit bio of in-place-update pages
f2fs: remove the redundant variable definition
f2fs: avoid IO split due to mixed WB_SYNC_ALL and WB_SYNC_NONE
f2fs: write small sized IO to hot log
f2fs: use bitmap in discard_entry
f2fs: clean up destroy_discard_cmd_control
f2fs: count discard command entry
f2fs: show issued flush/discard count
f2fs: relax node version check for victim data in gc
f2fs: start SSR much eariler to avoid FG_GC
f2fs: allocate node and hot data in the beginning of partition
f2fs: fix wrong max cost initialization
f2fs: allow write page cache when writting cp
f2fs: don't reserve additional space in xattr block
f2fs: clean up xattr operation
f2fs: don't track volatile file in dirty inode list
f2fs: show the max number of volatile operations
f2fs: fix race condition in between free nid allocator/initializer
f2fs: use set_page_private marcro in f2fs_trace_pid
f2fs: fix recording invalid last_victim
f2fs: more reasonable mem_size calculating of ino_entry
f2fs: calculate the f2fs_stat_info into base_mem
f2fs: avoid stat_inc_atomic_write for non-atomic file
f2fs: sanity check of crc_offset from raw checkpoint
f2fs: cleanup the disk level filename updating
f2fs: cover update_free_nid_bitmap with nid_list_lock
f2fs: fix bad prefetchw of NULL page
f2fs: clear FI_DATA_EXIST flag in truncate_inline_inode
f2fs: move mnt_want_write_file after arguments checking
f2fs: check new size by inode_newsize_ok in f2fs_insert_range
f2fs: avoid copy date to user-space if move file range fail
f2fs: drop duplicate new_size assign in f2fs_zero_range
f2fs: adjust the way of calculating nat block
f2fs: add fault injection on f2fs_truncate
f2fs: check range before defragment
f2fs: use parameter max_items instead of PIDVEC_SIZE
f2fs: add a punch discard command function
f2fs: allocate a bio for discarding when actually issuing it
f2fs: skip writeback meta pages if cp_mutex acquire failed
f2fs: show more precise message on orphan recovery failure
f2fs: remove dead macro PGOFS_OF_NEXT_DNODE
f2fs: drop duplicate radix tree lookup of nat_entry_set
f2fs: make sure trace all f2fs_issue_flush
f2fs: don't allow volatile writes for non-regular file
f2fs: don't allow atomic writes for not regular files
f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer
f2fs: build stat_info before orphan inode recovery
f2fs: fix the fault of calculating blkstart twice
f2fs: fix the fault of checking F2FS_LINK_MAX for rename inode
f2fs: don't allow to get pino when filename is encrypted
f2fs: fix wrong error injection for evict_inode
f2fs: le32_to_cpu for ckpt->cp_pack_total_block_count
f2fs: le16_to_cpu for xattr->e_value_size
f2fs: don't need to invalidate wrong node page
f2fs: fix an error return value in truncate_partial_data_page
f2fs: combine nat_bits and free_nid_bitmap cache
f2fs: skip scanning free nid bitmap of full NAT blocks
f2fs: use __set{__clear}_bit_le
f2fs: update_free_nid_bitmap() can be static
f2fs: __update_nat_bits() can be static
f2fs: le16_to_cpu for xattr->e_value_size
f2fs: don't overwrite node block by SSR
f2fs: don't need to invalidate wrong node page
f2fs: fix an error return value in truncate_partial_data_page
fscrypt: catch up to v4.11-rc1
f2fs: avoid to flush nat journal entries
f2fs: avoid to issue redundant discard commands
f2fs: fix a plint compile warning
f2fs: add f2fs_drop_inode tracepoint
f2fs: Fix zoned block device support
f2fs: remove redundant set_page_dirty()
f2fs: fix to enlarge size of write_io_dummy mempool
f2fs: fix memory leak of write_io_dummy mempool during umount
f2fs: fix to update F2FS_{CP_}WB_DATA count correctly
f2fs: use MAX_FREE_NIDS for the free nids target
f2fs: introduce free nid bitmap
f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint
f2fs: update the comment of default nr_pages to skipping
f2fs: drop the duplicate pval in f2fs_getxattr
f2fs: Don't update the xattr data that same as the exist
f2fs: kill __is_extent_same
f2fs: avoid bggc->fggc when enough free segments are avaliable after cp
f2fs: select target segment with closer temperature in SSR mode
f2fs: show simple call stack in fault injection message
fscrypt: catch fscrypto_get_policy in v4.10-rc6
f2fs: use __clear_bit_le
f2fs: no need lock_op in f2fs_write_inline_data
f2fs: add bitmaps for empty or full NAT blocks
f2fs: replace rw semaphore extent_tree_lock with mutex lock
f2fs: avoid m_flags overlay when allocating more data blocks
f2fs: remove unsafe bitmap checking
f2fs: init local extent_info to avoid stale stack info in tp
f2fs: remove unnecessary condition check for write_checkpoint in f2fs_gc
f2fs: do SSR for node segments more aggresively
f2fs: check discard alignment only for SEQWRITE zones
f2fs: wait for discard completion after submission
f2fs: much larger batched trim_fs job
f2fs: avoid very large discard command
f2fs: find data segments across all the types
f2fs: do SSR in higher priority
f2fs: do SSR for data when there is enough free space
f2fs: node segment is prior to data segment selected victim
f2fs: put allocate_segment after refresh_sit_entry
f2fs: add ovp valid_blocks check for bg gc victim to fg_gc
f2fs: do not wait for writeback in write_begin
f2fs: replace __get_victim by dirty_segments in FG_GC
f2fs: fix multiple f2fs_add_link() calls having same name
f2fs: show actual device info in tracepoints
f2fs: use SSR for warm node as well
f2fs: enable inline_xattr by default
f2fs: introduce noinline_xattr mount option
f2fs: avoid reading NAT page by get_node_info
f2fs: remove build_free_nids() during checkpoint
f2fs: change recovery policy of xattr node block
f2fs: super: constify fscrypt_operations structure
f2fs: show checkpoint version at mount time
f2fs: remove preflush for nobarrier case
f2fs: check last page index in cached bio to decide submission
f2fs: check io submission more precisely
f2fs: fix trim_fs assignment
Revert "f2fs: remove batched discard in f2fs_trim_fs"
f2fs: fix missing bio_alloc(1)
f2fs: call internal __write_data_page directly
f2fs: avoid out-of-order execution of atomic writes
f2fs: move write_node_page above fsync_node_pages
f2fs: move flush tracepoint
f2fs: show # of APPEND and UPDATE inodes
f2fs: fix 446 coding style warnings in f2fs.h
f2fs: fix 3 coding style errors in f2fs.h
f2fs: declare missing static function
f2fs: show the fault injection mount option
f2fs: fix null pointer dereference when issuing flush in ->fsync
f2fs: fix to avoid overflow when left shifting page offset
f2fs: enhance lookup xattr
f2fs: fix a dead loop in f2fs_fiemap()
f2fs: do not preallocate blocks which has wrong buffer
f2fs: show # of on-going flush and discard bios
f2fs: add a kernel thread to issue discard commands asynchronously
f2fs: factor out discard command info into discard_cmd_control
f2fs: remove batched discard in f2fs_trim_fs
f2fs: reorganize stat information
f2fs: clean up flush/discard command namings
f2fs: check in-memory sit version bitmap
f2fs: check in-memory nat version bitmap
f2fs: check in-memory block bitmap
f2fs: introduce FI_ATOMIC_COMMIT
f2fs: clean up with list_{first, last}_entry
f2fs: return fs_trim if there is no candidate
f2fs: avoid needless checkpoint in f2fs_trim_fs
f2fs: relax async discard commands more
f2fs: drop exist_data for inline_data when truncated to 0
f2fs: don't allow encrypted operations without keys
f2fs: show the max number of atomic operations
f2fs: get io size bit from mount option
f2fs: support IO alignment for DATA and NODE writes
f2fs: add submit_bio tracepoint
f2fs: reassign new segment for mode=lfs
f2fs: fix a missing discard prefree segments
f2fs: use rb_entry_safe
f2fs: add a case of no need to read a page in write begin
f2fs: fix a problem of using memory after free
f2fs: remove unneeded condition
f2fs: don't cache nat entry if out of memory
f2fs: remove unused values in recover_fsync_data
f2fs: support async discard based on v4.9
f2fs: resolve op and op_flags confilcts
f2fs: remove wrong backported codes
f2fs: fix a missing size change in f2fs_setattr
fs/super.c: fix race between freeze_super() and thaw_super()
scripts/tags.sh: catch 4.9-rc6
f2fs: fix to access nullified flush_cmd_control pointer
f2fs: free meta pages if sanity check for ckpt is failed
f2fs: detect wrong layout
f2fs: call sync_fs when f2fs is idle
Revert "f2fs: use percpu_counter for # of dirty pages in inode"
f2fs: return AOP_WRITEPAGE_ACTIVATE for writepage
f2fs: do not activate auto_recovery for fallocated i_size
f2fs: fix 32-bit build
f2fs: set ->owner for debugfs status file's file_operations
f2fs: fix incorrect free inode count in ->statfs
f2fs: drop duplicate header timer.h
f2fs: fix wrong AUTO_RECOVER condition
f2fs: do not recover i_size if it's valid
f2fs: fix fdatasync
f2fs: fix to account total free nid correctly
f2fs: fix an infinite loop when flush nodes in cp
f2fs: don't wait writeback for datas during checkpoint
f2fs: fix wrong written_valid_blocks counting
f2fs: avoid BG_GC in f2fs_balance_fs
f2fs: fix redundant block allocation
f2fs: use err for f2fs_preallocate_blocks
f2fs: support multiple devices
f2fs: allow dio read for LFS mode
f2fs: revert segment allocation for direct IO
f2fs: return directly if block has been removed from the victim
Revert "f2fs: do not recover from previous remained wrong dnodes"
f2fs: remove checkpoint in f2fs_freeze
f2fs: assign segments correctly for direct_io
f2fs: fix wrong i_atime recovery
f2fs: record inode updating status correctly
f2fs: Trace reset zone events
f2fs: Reset sequential zones on zoned block devices
f2fs: Cache zoned block devices zone type
f2fs: Do not allow adaptive mode for host-managed zoned block devices
f2fs: Always enable discard for zoned blocks devices
f2fs: Suppress discard warning message for zoned block devices
f2fs: Check zoned block feature for host-managed zoned block devices
f2fs: Use generic zoned block device terminology
f2fs: Add missing break in switch-case
f2fs: avoid infinite loop in the EIO case on recover_orphan_inodes
f2fs: report error of f2fs_fill_dentries
fs/crypto: catch up 4.9-rc6
f2fs: hide a maybe-uninitialized warning
f2fs: remove percpu_count due to performance regression
f2fs: make clean inodes when flushing inode page
f2fs: keep dirty inodes selectively for checkpoint
f2fs: Replace CURRENT_TIME_SEC with current_time() for inode timestamps
f2fs: use BIO_MAX_PAGES for bio allocation
f2fs: declare static function for __build_free_nids
f2fs: call f2fs_balance_fs for setattr
f2fs: count dirty inodes to flush node pages during checkpoint
f2fs: avoid casted negative value as shrink count
f2fs: don't interrupt free nids building during nid allocation
f2fs: clean up free nid list operations
f2fs: split free nid list
f2fs: clear nlink if fail to add_link
f2fs: fix sparse warnings
f2fs: fix error handling in fsync_node_pages
f2fs: fix to update largest extent under lock
f2fs: be aware of extent beyond EOF in fiemap
f2fs: don't miss any f2fs_balance_fs cases
f2fs: add missing f2fs_balance_fs in f2fs_zero_range
f2fs: give a chance to detach from dirty list
f2fs: fix to release discard entries during checkpoint
f2fs: exclude free nids building and allocation
f2fs: fix to determine start_cp_addr by sbi->cur_cp_pack
f2fs: fix overflow due to condition check order
posix_acl: Clear SGID bit when setting file permissions
f2fs: fix wrong sum_page pointer in f2fs_gc
f2fs: backport from (4c1fad64 - Merge tag 'for-f2fs-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs)
Change-Id: I6c7208efc63ce7b13f26f0ec1cd3c8aef410eff0
Signed-off-by: Blagovest Kolenichev <bkolenichev@codeaurora.org>
Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
786 lines
22 KiB
Makefile
786 lines
22 KiB
Makefile
|
|
ifeq ($(src-perf),)
|
|
src-perf := $(srctree)/tools/perf
|
|
endif
|
|
|
|
ifeq ($(obj-perf),)
|
|
obj-perf := $(OUTPUT)
|
|
endif
|
|
|
|
ifneq ($(obj-perf),)
|
|
obj-perf := $(abspath $(obj-perf))/
|
|
endif
|
|
|
|
$(shell printf "" > $(OUTPUT).config-detected)
|
|
detected = $(shell echo "$(1)=y" >> $(OUTPUT).config-detected)
|
|
detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
|
|
|
|
CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
|
|
|
|
include $(src-perf)/config/Makefile.arch
|
|
|
|
$(call detected_var,ARCH)
|
|
|
|
NO_PERF_REGS := 1
|
|
|
|
# Additional ARCH settings for x86
|
|
ifeq ($(ARCH),x86)
|
|
$(call detected,CONFIG_X86)
|
|
ifeq (${IS_64_BIT}, 1)
|
|
CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
|
|
ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
|
|
LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
|
|
$(call detected,CONFIG_X86_64)
|
|
else
|
|
LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
|
|
endif
|
|
NO_PERF_REGS := 0
|
|
endif
|
|
|
|
ifeq ($(ARCH),arm)
|
|
NO_PERF_REGS := 0
|
|
LIBUNWIND_LIBS = -lunwind -lunwind-arm
|
|
endif
|
|
|
|
ifeq ($(ARCH),arm64)
|
|
NO_PERF_REGS := 0
|
|
LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
|
|
endif
|
|
|
|
ifeq ($(NO_PERF_REGS),0)
|
|
$(call detected,CONFIG_PERF_REGS)
|
|
endif
|
|
|
|
# So far there's only x86 and arm libdw unwind support merged in perf.
|
|
# Disable it on all other architectures in case libdw unwind
|
|
# support is detected in system. Add supported architectures
|
|
# to the check.
|
|
ifneq ($(ARCH),$(filter $(ARCH),x86 arm))
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
endif
|
|
|
|
ifeq ($(LIBUNWIND_LIBS),)
|
|
NO_LIBUNWIND := 1
|
|
else
|
|
#
|
|
# For linking with debug library, run like:
|
|
#
|
|
# make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
|
|
#
|
|
ifdef LIBUNWIND_DIR
|
|
LIBUNWIND_CFLAGS = -I$(LIBUNWIND_DIR)/include
|
|
LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
|
|
endif
|
|
LIBUNWIND_LDFLAGS += $(LIBUNWIND_LIBS)
|
|
|
|
# Set per-feature check compilation flags
|
|
FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
|
|
FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS)
|
|
FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
|
|
FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS)
|
|
endif
|
|
|
|
ifeq ($(NO_PERF_REGS),0)
|
|
CFLAGS += -DHAVE_PERF_REGS_SUPPORT
|
|
endif
|
|
|
|
ifndef NO_LIBELF
|
|
# for linking with debug library, run like:
|
|
# make DEBUG=1 LIBDW_DIR=/opt/libdw/
|
|
ifdef LIBDW_DIR
|
|
LIBDW_CFLAGS := -I$(LIBDW_DIR)/include
|
|
LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
|
|
endif
|
|
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
|
|
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
|
|
endif
|
|
|
|
ifdef LIBBABELTRACE
|
|
# for linking with debug library, run like:
|
|
# make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
|
|
ifdef LIBBABELTRACE_DIR
|
|
LIBBABELTRACE_CFLAGS := -I$(LIBBABELTRACE_DIR)/include
|
|
LIBBABELTRACE_LDFLAGS := -L$(LIBBABELTRACE_DIR)/lib
|
|
endif
|
|
FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
|
|
FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
|
|
endif
|
|
|
|
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/arch/$(ARCH)/include/uapi -I$(srctree)/include/uapi
|
|
# include ARCH specific config
|
|
-include $(src-perf)/arch/$(ARCH)/Makefile
|
|
|
|
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
|
|
CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
|
|
endif
|
|
|
|
include $(src-perf)/config/utilities.mak
|
|
|
|
ifeq ($(call get-executable,$(FLEX)),)
|
|
dummy := $(error Error: $(FLEX) is missing on this system, please install it)
|
|
endif
|
|
|
|
ifeq ($(call get-executable,$(BISON)),)
|
|
dummy := $(error Error: $(BISON) is missing on this system, please install it)
|
|
endif
|
|
|
|
# Treat warnings as errors unless directed not to
|
|
ifneq ($(WERROR),0)
|
|
CFLAGS += -Werror
|
|
endif
|
|
|
|
ifndef DEBUG
|
|
DEBUG := 0
|
|
endif
|
|
|
|
ifeq ($(DEBUG),0)
|
|
CFLAGS += -O6
|
|
else
|
|
CFLAGS += $(call cc-option,-Og,-O0)
|
|
endif
|
|
|
|
ifdef PARSER_DEBUG
|
|
PARSER_DEBUG_BISON := -t
|
|
PARSER_DEBUG_FLEX := -d
|
|
CFLAGS += -DPARSER_DEBUG
|
|
$(call detected_var,PARSER_DEBUG_BISON)
|
|
$(call detected_var,PARSER_DEBUG_FLEX)
|
|
endif
|
|
|
|
ifndef NO_LIBPYTHON
|
|
# Try different combinations to accommodate systems that only have
|
|
# python[2][-config] in weird combinations but always preferring
|
|
# python2 and python2-config as per pep-0394. If we catch a
|
|
# python[-config] in version 3, the version check will kill it.
|
|
PYTHON2 := $(if $(call get-executable,python2),python2,python)
|
|
override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON2))
|
|
PYTHON2_CONFIG := \
|
|
$(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
|
|
override PYTHON_CONFIG := \
|
|
$(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON2_CONFIG))
|
|
|
|
PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
|
|
|
|
PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
|
|
PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
|
|
|
|
FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
|
|
FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
|
|
FEATURE_CHECK_CFLAGS-libpython-version := $(PYTHON_EMBED_CCOPTS)
|
|
FEATURE_CHECK_LDFLAGS-libpython-version := $(PYTHON_EMBED_LDOPTS)
|
|
endif
|
|
|
|
CFLAGS += -fno-omit-frame-pointer
|
|
CFLAGS += -ggdb3
|
|
CFLAGS += -funwind-tables
|
|
CFLAGS += -Wall
|
|
CFLAGS += -Wextra
|
|
CFLAGS += -std=gnu99
|
|
|
|
# Enforce a non-executable stack, as we may regress (again) in the future by
|
|
# adding assembler files missing the .GNU-stack linker note.
|
|
LDFLAGS += -Wl,-z,noexecstack
|
|
|
|
EXTLIBS = -lpthread -lrt -lm -ldl
|
|
|
|
include $(srctree)/tools/build/Makefile.feature
|
|
|
|
ifeq ($(feature-stackprotector-all), 1)
|
|
CFLAGS += -fstack-protector-all
|
|
endif
|
|
|
|
ifeq ($(DEBUG),0)
|
|
ifeq ($(feature-fortify-source), 1)
|
|
CFLAGS += -D_FORTIFY_SOURCE=2
|
|
endif
|
|
endif
|
|
|
|
CFLAGS += -I$(src-perf)/util/include
|
|
CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
|
|
CFLAGS += -I$(srctree)/tools/include/
|
|
CFLAGS += -I$(srctree)/arch/$(ARCH)/include/uapi
|
|
CFLAGS += -I$(srctree)/arch/$(ARCH)/include
|
|
CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include
|
|
CFLAGS += -I$(srctree)/include/uapi
|
|
CFLAGS += -I$(srctree)/include
|
|
|
|
# $(obj-perf) for generated common-cmds.h
|
|
# $(obj-perf)/util for generated bison/flex headers
|
|
ifneq ($(OUTPUT),)
|
|
CFLAGS += -I$(obj-perf)/util
|
|
CFLAGS += -I$(obj-perf)
|
|
endif
|
|
|
|
CFLAGS += -I$(src-perf)/util
|
|
CFLAGS += -I$(src-perf)
|
|
CFLAGS += -I$(srctree)/tools/lib/
|
|
|
|
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
|
|
|
|
ifeq ($(feature-sync-compare-and-swap), 1)
|
|
CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
|
|
endif
|
|
|
|
ifeq ($(feature-pthread-attr-setaffinity-np), 1)
|
|
CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
|
|
endif
|
|
|
|
ifndef NO_BIONIC
|
|
$(call feature_check,bionic)
|
|
ifeq ($(feature-bionic), 1)
|
|
BIONIC := 1
|
|
EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
|
|
EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
|
|
endif
|
|
endif
|
|
|
|
ifdef NO_LIBELF
|
|
NO_DWARF := 1
|
|
NO_DEMANGLE := 1
|
|
NO_LIBUNWIND := 1
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
NO_LIBBPF := 1
|
|
else
|
|
ifeq ($(feature-libelf), 0)
|
|
ifeq ($(feature-glibc), 1)
|
|
LIBC_SUPPORT := 1
|
|
endif
|
|
ifeq ($(BIONIC),1)
|
|
LIBC_SUPPORT := 1
|
|
endif
|
|
ifeq ($(LIBC_SUPPORT),1)
|
|
msg := $(warning No libelf found, disables 'probe' tool and BPF support in 'perf record', please install elfutils-libelf-devel/libelf-dev);
|
|
|
|
NO_LIBELF := 1
|
|
NO_DWARF := 1
|
|
NO_DEMANGLE := 1
|
|
NO_LIBUNWIND := 1
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
NO_LIBBPF := 1
|
|
else
|
|
ifneq ($(filter s% -static%,$(LDFLAGS),),)
|
|
msg := $(error No static glibc found, please install glibc-static);
|
|
else
|
|
msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
|
|
endif
|
|
endif
|
|
else
|
|
ifndef NO_LIBDW_DWARF_UNWIND
|
|
ifneq ($(feature-libdw-dwarf-unwind),1)
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
|
|
endif
|
|
endif
|
|
ifneq ($(feature-dwarf), 1)
|
|
msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev);
|
|
NO_DWARF := 1
|
|
endif # Dwarf support
|
|
endif # libelf support
|
|
endif # NO_LIBELF
|
|
|
|
ifdef NO_DWARF
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
endif
|
|
|
|
ifndef NO_LIBELF
|
|
CFLAGS += -DHAVE_LIBELF_SUPPORT
|
|
EXTLIBS += -lelf
|
|
$(call detected,CONFIG_LIBELF)
|
|
|
|
ifeq ($(feature-libelf-mmap), 1)
|
|
CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
|
|
endif
|
|
|
|
ifeq ($(feature-libelf-getphdrnum), 1)
|
|
CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
|
|
endif
|
|
|
|
# include ARCH specific config
|
|
-include $(src-perf)/arch/$(ARCH)/Makefile
|
|
|
|
ifndef NO_DWARF
|
|
ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
|
|
msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
|
|
NO_DWARF := 1
|
|
else
|
|
CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
|
|
LDFLAGS += $(LIBDW_LDFLAGS)
|
|
DWARFLIBS := -ldw
|
|
ifeq ($(findstring -static,${LDFLAGS}),-static)
|
|
DWARFLIBS += -lelf -lebl -lz -llzma -lbz2
|
|
endif
|
|
EXTLIBS += ${DWARFLIBS}
|
|
$(call detected,CONFIG_DWARF)
|
|
endif # PERF_HAVE_DWARF_REGS
|
|
endif # NO_DWARF
|
|
|
|
ifndef NO_LIBBPF
|
|
ifeq ($(feature-bpf), 1)
|
|
CFLAGS += -DHAVE_LIBBPF_SUPPORT
|
|
$(call detected,CONFIG_LIBBPF)
|
|
endif
|
|
endif # NO_LIBBPF
|
|
endif # NO_LIBELF
|
|
|
|
ifeq ($(ARCH),powerpc)
|
|
ifndef NO_DWARF
|
|
CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_LIBUNWIND
|
|
ifneq ($(feature-libunwind), 1)
|
|
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
|
|
NO_LIBUNWIND := 1
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_LIBBPF
|
|
ifneq ($(feature-bpf), 1)
|
|
msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
|
|
NO_LIBBPF := 1
|
|
endif
|
|
endif
|
|
|
|
dwarf-post-unwind := 1
|
|
dwarf-post-unwind-text := BUG
|
|
|
|
# setup DWARF post unwinder
|
|
ifdef NO_LIBUNWIND
|
|
ifdef NO_LIBDW_DWARF_UNWIND
|
|
msg := $(warning Disabling post unwind, no support found.);
|
|
dwarf-post-unwind := 0
|
|
else
|
|
dwarf-post-unwind-text := libdw
|
|
$(call detected,CONFIG_LIBDW_DWARF_UNWIND)
|
|
endif
|
|
else
|
|
dwarf-post-unwind-text := libunwind
|
|
$(call detected,CONFIG_LIBUNWIND)
|
|
# Enable libunwind support by default.
|
|
ifndef NO_LIBDW_DWARF_UNWIND
|
|
NO_LIBDW_DWARF_UNWIND := 1
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(dwarf-post-unwind),1)
|
|
CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
|
|
$(call detected,CONFIG_DWARF_UNWIND)
|
|
else
|
|
NO_DWARF_UNWIND := 1
|
|
endif
|
|
|
|
ifndef NO_LIBUNWIND
|
|
ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
|
|
$(call feature_check,libunwind-debug-frame)
|
|
ifneq ($(feature-libunwind-debug-frame), 1)
|
|
msg := $(warning No debug_frame support found in libunwind);
|
|
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
|
|
endif
|
|
else
|
|
# non-ARM has no dwarf_find_debug_frame() function:
|
|
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
|
|
endif
|
|
CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
|
|
EXTLIBS += $(LIBUNWIND_LIBS)
|
|
CFLAGS += $(LIBUNWIND_CFLAGS)
|
|
LDFLAGS += $(LIBUNWIND_LDFLAGS)
|
|
endif
|
|
|
|
ifndef NO_LIBAUDIT
|
|
ifneq ($(feature-libaudit), 1)
|
|
msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
|
|
NO_LIBAUDIT := 1
|
|
else
|
|
CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
|
|
EXTLIBS += -laudit
|
|
$(call detected,CONFIG_AUDIT)
|
|
endif
|
|
endif
|
|
|
|
ifdef NO_NEWT
|
|
NO_SLANG=1
|
|
endif
|
|
|
|
ifndef NO_SLANG
|
|
ifneq ($(feature-libslang), 1)
|
|
msg := $(warning slang not found, disables TUI support. Please install slang-devel or libslang-dev);
|
|
NO_SLANG := 1
|
|
else
|
|
# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
|
CFLAGS += -I/usr/include/slang
|
|
CFLAGS += -DHAVE_SLANG_SUPPORT
|
|
EXTLIBS += -lslang
|
|
$(call detected,CONFIG_SLANG)
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_GTK2
|
|
FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
|
|
ifneq ($(feature-gtk2), 1)
|
|
msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
|
|
NO_GTK2 := 1
|
|
else
|
|
ifeq ($(feature-gtk2-infobar), 1)
|
|
GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
|
|
endif
|
|
CFLAGS += -DHAVE_GTK2_SUPPORT
|
|
GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
|
|
GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
|
|
EXTLIBS += -ldl
|
|
endif
|
|
endif
|
|
|
|
grep-libs = $(filter -l%,$(1))
|
|
strip-libs = $(filter-out -l%,$(1))
|
|
|
|
ifdef CSTRACE_PATH
|
|
ifeq (${IS_64_BIT}, 1)
|
|
CSTRACE_LNX = linux64
|
|
else
|
|
CSTRACE_LNX = linux
|
|
endif
|
|
ifeq (${DEBUG}, 1)
|
|
LIBCSTRACE = -lcstraced_c_api -lcstraced
|
|
CSTRACE_LIB_PATH = $(CSTRACE_PATH)/lib/$(CSTRACE_LNX)/dbg
|
|
else
|
|
LIBCSTRACE = -lcstraced_c_api -lcstraced
|
|
CSTRACE_LIB_PATH = $(CSTRACE_PATH)/lib/$(CSTRACE_LNX)/rel
|
|
endif
|
|
$(call detected,CSTRACE)
|
|
$(call detected_var,CSTRACE_PATH)
|
|
EXTLIBS += -L$(CSTRACE_LIB_PATH) $(LIBCSTRACE) -lstdc++
|
|
endif
|
|
|
|
ifdef NO_LIBPERL
|
|
CFLAGS += -DNO_LIBPERL
|
|
else
|
|
PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
|
|
PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
|
|
PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
|
|
PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
|
|
FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
|
|
|
|
ifneq ($(feature-libperl), 1)
|
|
CFLAGS += -DNO_LIBPERL
|
|
NO_LIBPERL := 1
|
|
msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
|
|
else
|
|
LDFLAGS += $(PERL_EMBED_LDFLAGS)
|
|
EXTLIBS += $(PERL_EMBED_LIBADD)
|
|
$(call detected,CONFIG_LIBPERL)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(feature-timerfd), 1)
|
|
CFLAGS += -DHAVE_TIMERFD_SUPPORT
|
|
else
|
|
msg := $(warning No timerfd support. Disables 'perf kvm stat live');
|
|
endif
|
|
|
|
disable-python = $(eval $(disable-python_code))
|
|
define disable-python_code
|
|
CFLAGS += -DNO_LIBPYTHON
|
|
$(warning $1)
|
|
NO_LIBPYTHON := 1
|
|
endef
|
|
|
|
ifdef NO_LIBPYTHON
|
|
$(call disable-python,Python support disabled by user)
|
|
else
|
|
|
|
ifndef PYTHON
|
|
$(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
|
|
else
|
|
PYTHON_WORD := $(call shell-wordify,$(PYTHON))
|
|
|
|
ifndef PYTHON_CONFIG
|
|
$(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
|
|
else
|
|
|
|
PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
|
|
|
|
PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
|
|
PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
|
|
PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
|
|
PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
|
|
FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
|
|
|
|
ifneq ($(feature-libpython), 1)
|
|
$(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
|
|
else
|
|
|
|
ifneq ($(feature-libpython-version), 1)
|
|
$(warning Python 3 is not yet supported; please set)
|
|
$(warning PYTHON and/or PYTHON_CONFIG appropriately.)
|
|
$(warning If you also have Python 2 installed, then)
|
|
$(warning try something like:)
|
|
$(warning $(and ,))
|
|
$(warning $(and ,) make PYTHON=python2)
|
|
$(warning $(and ,))
|
|
$(warning Otherwise, disable Python support entirely:)
|
|
$(warning $(and ,))
|
|
$(warning $(and ,) make NO_LIBPYTHON=1)
|
|
$(warning $(and ,))
|
|
$(error $(and ,))
|
|
else
|
|
LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
|
|
EXTLIBS += $(PYTHON_EMBED_LIBADD)
|
|
LANG_BINDINGS += $(obj-perf)python/perf.so
|
|
$(call detected,CONFIG_LIBPYTHON)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(feature-libbfd), 1)
|
|
EXTLIBS += -lbfd
|
|
|
|
# call all detections now so we get correct
|
|
# status in VF output
|
|
$(call feature_check,liberty)
|
|
$(call feature_check,liberty-z)
|
|
$(call feature_check,cplus-demangle)
|
|
|
|
ifeq ($(feature-liberty), 1)
|
|
EXTLIBS += -liberty
|
|
else
|
|
ifeq ($(feature-liberty-z), 1)
|
|
EXTLIBS += -liberty -lz
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifdef NO_DEMANGLE
|
|
CFLAGS += -DNO_DEMANGLE
|
|
else
|
|
ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
|
|
EXTLIBS += -liberty
|
|
CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
|
|
else
|
|
ifneq ($(feature-libbfd), 1)
|
|
ifneq ($(feature-liberty), 1)
|
|
ifneq ($(feature-liberty-z), 1)
|
|
# we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
|
|
# or any of 'bfd iberty z' trinity
|
|
ifeq ($(feature-cplus-demangle), 1)
|
|
EXTLIBS += -liberty
|
|
CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
|
|
else
|
|
msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
|
|
CFLAGS += -DNO_DEMANGLE
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(filter -lbfd,$(EXTLIBS)),)
|
|
CFLAGS += -DHAVE_LIBBFD_SUPPORT
|
|
endif
|
|
|
|
ifndef NO_ZLIB
|
|
ifeq ($(feature-zlib), 1)
|
|
CFLAGS += -DHAVE_ZLIB_SUPPORT
|
|
EXTLIBS += -lz
|
|
$(call detected,CONFIG_ZLIB)
|
|
else
|
|
NO_ZLIB := 1
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_LZMA
|
|
ifeq ($(feature-lzma), 1)
|
|
CFLAGS += -DHAVE_LZMA_SUPPORT
|
|
EXTLIBS += -llzma
|
|
$(call detected,CONFIG_LZMA)
|
|
else
|
|
msg := $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev);
|
|
NO_LZMA := 1
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_BACKTRACE
|
|
ifeq ($(feature-backtrace), 1)
|
|
CFLAGS += -DHAVE_BACKTRACE_SUPPORT
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_LIBNUMA
|
|
ifeq ($(feature-libnuma), 0)
|
|
msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
|
|
NO_LIBNUMA := 1
|
|
else
|
|
ifeq ($(feature-numa_num_possible_cpus), 0)
|
|
msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8);
|
|
NO_LIBNUMA := 1
|
|
else
|
|
CFLAGS += -DHAVE_LIBNUMA_SUPPORT
|
|
EXTLIBS += -lnuma
|
|
$(call detected,CONFIG_NUMA)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifdef HAVE_KVM_STAT_SUPPORT
|
|
CFLAGS += -DHAVE_KVM_STAT_SUPPORT
|
|
endif
|
|
|
|
ifeq (${IS_64_BIT}, 1)
|
|
ifndef NO_PERF_READ_VDSO32
|
|
$(call feature_check,compile-32)
|
|
ifeq ($(feature-compile-32), 1)
|
|
CFLAGS += -DHAVE_PERF_READ_VDSO32
|
|
else
|
|
NO_PERF_READ_VDSO32 := 1
|
|
endif
|
|
endif
|
|
ifneq ($(ARCH), x86)
|
|
NO_PERF_READ_VDSOX32 := 1
|
|
endif
|
|
ifndef NO_PERF_READ_VDSOX32
|
|
$(call feature_check,compile-x32)
|
|
ifeq ($(feature-compile-x32), 1)
|
|
CFLAGS += -DHAVE_PERF_READ_VDSOX32
|
|
else
|
|
NO_PERF_READ_VDSOX32 := 1
|
|
endif
|
|
endif
|
|
else
|
|
NO_PERF_READ_VDSO32 := 1
|
|
NO_PERF_READ_VDSOX32 := 1
|
|
endif
|
|
|
|
ifdef LIBBABELTRACE
|
|
$(call feature_check,libbabeltrace)
|
|
ifeq ($(feature-libbabeltrace), 1)
|
|
CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
|
|
LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
|
|
EXTLIBS += -lbabeltrace-ctf
|
|
$(call detected,CONFIG_LIBBABELTRACE)
|
|
else
|
|
msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
|
|
endif
|
|
endif
|
|
|
|
ifndef NO_AUXTRACE
|
|
ifeq ($(ARCH),x86)
|
|
ifeq ($(feature-get_cpuid), 0)
|
|
msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
|
|
NO_AUXTRACE := 1
|
|
else
|
|
$(call detected,CONFIG_AUXTRACE)
|
|
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
|
|
endif
|
|
else
|
|
$(call detected,CONFIG_AUXTRACE)
|
|
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
|
|
endif
|
|
endif
|
|
|
|
# Among the variables below, these:
|
|
# perfexecdir
|
|
# template_dir
|
|
# mandir
|
|
# infodir
|
|
# htmldir
|
|
# ETC_PERFCONFIG (but not sysconfdir)
|
|
# can be specified as a relative path some/where/else;
|
|
# this is interpreted as relative to $(prefix) and "perf" at
|
|
# runtime figures out where they are based on the path to the executable.
|
|
# This can help installing the suite in a relocatable way.
|
|
|
|
# Make the path relative to DESTDIR, not to prefix
|
|
ifndef DESTDIR
|
|
prefix ?= $(HOME)
|
|
endif
|
|
bindir_relative = bin
|
|
bindir = $(abspath $(prefix)/$(bindir_relative))
|
|
mandir = share/man
|
|
infodir = share/info
|
|
perfexecdir = libexec/perf-core
|
|
sharedir = $(prefix)/share
|
|
template_dir = share/perf-core/templates
|
|
STRACE_GROUPS_DIR = share/perf-core/strace/groups
|
|
htmldir = share/doc/perf-doc
|
|
ifeq ($(prefix),/usr)
|
|
sysconfdir = /etc
|
|
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
|
|
else
|
|
sysconfdir = $(prefix)/etc
|
|
ETC_PERFCONFIG = etc/perfconfig
|
|
endif
|
|
ifndef lib
|
|
ifeq ($(ARCH)$(IS_64_BIT), x861)
|
|
lib = lib64
|
|
else
|
|
lib = lib
|
|
endif
|
|
endif # lib
|
|
libdir = $(prefix)/$(lib)
|
|
|
|
# Shell quote (do not use $(call) to accommodate ancient setups);
|
|
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
|
|
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
|
|
DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
|
|
bindir_SQ = $(subst ','\'',$(bindir))
|
|
mandir_SQ = $(subst ','\'',$(mandir))
|
|
infodir_SQ = $(subst ','\'',$(infodir))
|
|
perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
|
|
template_dir_SQ = $(subst ','\'',$(template_dir))
|
|
htmldir_SQ = $(subst ','\'',$(htmldir))
|
|
prefix_SQ = $(subst ','\'',$(prefix))
|
|
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
|
|
libdir_SQ = $(subst ','\'',$(libdir))
|
|
|
|
ifneq ($(filter /%,$(firstword $(perfexecdir))),)
|
|
perfexec_instdir = $(perfexecdir)
|
|
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
|
|
else
|
|
perfexec_instdir = $(prefix)/$(perfexecdir)
|
|
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
|
|
endif
|
|
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
|
|
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
|
|
|
|
# If we install to $(HOME) we keep the traceevent default:
|
|
# $(HOME)/.traceevent/plugins
|
|
# Otherwise we install plugins into the global $(libdir).
|
|
ifdef DESTDIR
|
|
plugindir=$(libdir)/traceevent/plugins
|
|
plugindir_SQ= $(subst ','\'',$(plugindir))
|
|
endif
|
|
|
|
print_var = $(eval $(print_var_code)) $(info $(MSG))
|
|
define print_var_code
|
|
MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
|
|
endef
|
|
|
|
ifeq ($(VF),1)
|
|
$(call print_var,prefix)
|
|
$(call print_var,bindir)
|
|
$(call print_var,libdir)
|
|
$(call print_var,sysconfdir)
|
|
$(call print_var,LIBUNWIND_DIR)
|
|
$(call print_var,LIBDW_DIR)
|
|
$(info )
|
|
endif
|
|
|
|
$(call detected_var,bindir_SQ)
|
|
$(call detected_var,PYTHON_WORD)
|
|
ifneq ($(OUTPUT),)
|
|
$(call detected_var,OUTPUT)
|
|
endif
|
|
$(call detected_var,htmldir_SQ)
|
|
$(call detected_var,infodir_SQ)
|
|
$(call detected_var,mandir_SQ)
|
|
$(call detected_var,ETC_PERFCONFIG_SQ)
|
|
$(call detected_var,STRACE_GROUPS_DIR_SQ)
|
|
$(call detected_var,prefix_SQ)
|
|
$(call detected_var,perfexecdir_SQ)
|
|
$(call detected_var,LIBDIR)
|
|
$(call detected_var,GTK_CFLAGS)
|
|
$(call detected_var,PERL_EMBED_CCOPTS)
|
|
$(call detected_var,PYTHON_EMBED_CCOPTS)
|