/* * Copyright (c) 1999 Al Smith * * Portions derived from work (c) 1995,1996 Christian Vogelgsang. * Portions derived from IRIX header files (c) 1988 Silicon Graphics */ #ifndef _EFS_EFS_H_ #define _EFS_EFS_H_ #ifdef pr_fmt #undef pr_fmt #endif #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include #include #define EFS_VERSION "1.0a" static const char cprt[] = "EFS: "EFS_VERSION" - (c) 1999 Al Smith "; /* 1 block is 512 bytes */ #define EFS_BLOCKSIZE_BITS 9 #define EFS_BLOCKSIZE (1 << EFS_BLOCKSIZE_BITS) typedef int32_t efs_block_t; typedef uint32_t efs_ino_t; #define EFS_DIRECTEXTENTS 12 /* * layout of an extent, in memory and on disk. 8 bytes exactly. */ typedef union extent_u { unsigned char raw[8]; struct extent_s { unsigned int ex_magic:8; /* magic # (zero) */ unsigned int ex_bn:24; /* basic block */ unsigned int ex_length:8; /* numblocks in this extent */ unsigned int ex_offset:24; /* logical offset into file */ } cooked; } efs_extent; typedef struct edevs { __be16 odev; __be32 ndev; } efs_devs; /* * extent based filesystem inode as it appears on disk. The efs inode * is exactly 128 bytes long. */ struct efs_dinode { __be16 di_mode; /* mode and type of file */ __be16 di_nlink; /* number of links to file */ __be16 di_uid; /* owner's user id */ __be16 di_gid; /* owner's group id */ __be32 di_size; /* number of bytes in file */ __be32 di_atime; /* time last accessed */ __be32 di_mtime; /* time last modified */ __be32 di_ctime; /* time created */ __be32 di_gen; /* generation number */ __be16 di_numextents; /* # of extents */ u_char di_version; /* version of inode */ u_char di_spare; /* spare - used by AFS */ union di_addr { efs_extent di_extents[EFS_DIRECTEXTENTS]; efs_devs di_dev; /* device for IFCHR/IFBLK */ } di_u; }; /* efs inode storage in memory */ struct efs_inode_info { int numextents; int lastextent; efs_extent extents[EFS_DIRECTEXTENTS]; struct inode vfs_inode; }; #include #define EFS_DIRBSIZE_BITS EFS_BLOCKSIZE_BITS #define EFS_DIRBSIZE (1 << EFS_DIRBSIZE_BITS) struct efs_dentry { __be32 inode; unsigned char namelen; char name[3]; }; #define EFS_DENTSIZE (sizeof(struct efs_dentry) - 3 + 1) #define EFS_MAXNAMELEN ((1 << (sizeof(char) * 8)) - 1) #define EFS_DIRBLK_HEADERSIZE 4 #define EFS_DIRBLK_MAGIC 0xbeef /* moo */ struct efs_dir { __be16 magic; unsigned char firstused; unsigned char slots; unsigned char space[EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE]; }; #define EFS_MAXENTS \ ((EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE) / \ (EFS_DENTSIZE + sizeof(char))) #define EFS_SLOTAT(dir, slot) EFS_REALOFF((dir)->space[slot]) #define EFS_REALOFF(offset) ((offset << 1)) static inline struct efs_inode_info *INODE_INFO(struct inode *inode) { return container_of(inode, struct efs_inode_info, vfs_inode); } static inline struct efs_sb_info *SUPER_INFO(struct super_block *sb) { return sb->s_fs_info; } struct statfs; struct fid; extern const struct inode_operations efs_dir_inode_operations; extern const struct file_operations efs_dir_operations; extern const struct address_space_operations efs_symlink_aops; extern struct inode *efs_iget(struct super_block *, unsigned long); extern efs_block_t efs_map_block(struct inode *, efs_block_t); extern int efs_get_block(struct inode *, sector_t, struct buffer_head *, int); extern struct dentry *efs_lookup(struct inode *, struct dentry *, unsigned int); extern struct dentry *efs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, int fh_type); extern struct dentry *efs_fh_to_parent(struct super_block *sb, struct fid *fid, int fh_len, int fh_type); extern struct dentry *efs_get_parent(struct dentry *); extern int efs_bmap(struct inode *, int); #endif /* _EFS_EFS_H_ */ ected='selected'>3space:mode:
authorThomas Gleixner <tglx@linutronix.de>2017-01-31 23:58:38 +0100
committerIngo Molnar <mingo@kernel.org>2017-02-01 08:37:27 +0100
commitdd86e373e09fb16b83e8adf5c48c421a4ca76468 (patch)
tree55703c2ea8584e303e342090614e0aab3509ab21 /tools/testing/selftests/vm/Makefile
parent0b3589be9b98994ce3d5aeca52445d1f5627c4ba (diff)
perf/x86/intel/rapl: Make package handling more robust
The package management code in RAPL relies on package mapping being available before a CPU is started. This changed with: 9d85eb9119f4 ("x86/smpboot: Make logical package management more robust") because the ACPI/BIOS information turned out to be unreliable, but that left RAPL in broken state. This was not noticed because on a regular boot all CPUs are online before RAPL is initialized. A possible fix would be to reintroduce the mess which allocates a package data structure in CPU prepare and when it turns out to already exist in starting throw it away later in the CPU online callback. But that's a horrible hack and not required at all because RAPL becomes functional for perf only in the CPU online callback. That's correct because user space is not yet informed about the CPU being onlined, so nothing caan rely on RAPL being available on that particular CPU. Move the allocation to the CPU online callback and simplify the hotplug handling. At this point the package mapping is established and correct. This also adds a missing check for available package data in the event_init() function. Reported-by: Yasuaki Ishimatsu <yasu.isimatu@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Siewior <bigeasy@linutronix.de> Cc: Stephane Eranian <eranian@google.com> Cc: Vince Weaver <vincent.weaver@maine.edu> Fixes: 9d85eb9119f4 ("x86/smpboot: Make logical package management more robust") Link: http://lkml.kernel.org/r/20170131230141.212593966@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/testing/selftests/vm/Makefile')