SYTest
(버전 사이의 차이)
(새 문서: test) |
|||
1번째 줄: | 1번째 줄: | ||
− | + | <uml> | |
+ | |||
+ | class Scsi_Host<< (S,#FF7700)/scsi/scsi_host.h >> { | ||
+ | struct list_head __devices; | ||
+ | struct list_head __targets; | ||
+ | struct scsi_host_cmd_pool *cmd_pool; | ||
+ | spinlock_t free_list_lock; | ||
+ | struct list_head free_list; | ||
+ | struct list_head starved_list; | ||
+ | spinlock_t default_lock; | ||
+ | spinlock_t *host_lock; | ||
+ | struct mutex scan_mutex; | ||
+ | struct list_head eh_cmd_q; | ||
+ | struct task_struct * ehandler; | ||
+ | struct completion * eh_action; | ||
+ | wait_queue_head_t host_wait; | ||
+ | struct scsi_host_template *hostt; | ||
+ | struct scsi_transport_template *transportt; | ||
+ | struct blk_queue_tag *bqt;unsigned int host_busy; | ||
+ | unsigned int host_failed; | ||
+ | unsigned int host_eh_scheduled; | ||
+ | unsigned int host_no; | ||
+ | int eh_deadline; | ||
+ | unsigned long last_reset; | ||
+ | unsigned int max_id; | ||
+ | unsigned int max_lun; | ||
+ | unsigned int max_channel; | ||
+ | unsigned int unique_id; | ||
+ | unsigned short max_cmd_len; | ||
+ | int this_id; | ||
+ | int can_queue; | ||
+ | short cmd_per_lun; | ||
+ | short unsigned int sg_tablesize; | ||
+ | short unsigned int sg_prot_tablesize; | ||
+ | short unsigned int max_sectors; | ||
+ | unsigned long dma_boundary; | ||
+ | unsigned long cmd_serial_number; | ||
+ | unsigned active_mode:2; | ||
+ | unsigned unchecked_isa_dma:1; | ||
+ | unsigned use_clustering:1; | ||
+ | unsigned use_blk_tcq:1; | ||
+ | unsigned host_self_blocked:1; | ||
+ | unsigned reverse_ordering:1; | ||
+ | unsigned ordered_tag:1; | ||
+ | unsigned eh_noresume:1; | ||
+ | unsigned no_write_same:1; | ||
+ | char work_q_name[20]; | ||
+ | struct workqueue_struct *work_q; | ||
+ | struct workqueue_struct *tmf_work_q; | ||
+ | unsigned int host_blocked; | ||
+ | unsigned int max_host_blocked; | ||
+ | unsigned int prot_capabilities; | ||
+ | unsigned char prot_guard_type; | ||
+ | struct request_queue *uspace_req_q; | ||
+ | unsigned long base; | ||
+ | unsigned long io_port; | ||
+ | unsigned char n_io_port; | ||
+ | unsigned char dma_channel; | ||
+ | unsigned int irq; | ||
+ | enum scsi_host_state shost_state; | ||
+ | struct device shost_gendev, shost_dev; | ||
+ | struct list_head sht_legacy_list; | ||
+ | void *shost_data; | ||
+ | struct device *dma_dev; | ||
+ | unsigned long hostdata[0]; | ||
+ | } | ||
+ | Scsi_Host --> list_head | ||
+ | Scsi_Host --> scsi_host_cmd_pool | ||
+ | Scsi_Host --> mutex | ||
+ | Scsi_Host --> task_struct | ||
+ | Scsi_Host --> completion | ||
+ | Scsi_Host --> scsi_host_template | ||
+ | Scsi_Host --> scsi_transport_template | ||
+ | Scsi_Host --> blk_queue_tag | ||
+ | Scsi_Host --> workqueue_struct | ||
+ | Scsi_Host --> request_queue | ||
+ | Scsi_Host --> scsi_host_state | ||
+ | Scsi_Host --> device | ||
+ | |||
+ | |||
+ | class scsi_host_cmd_pool << (S,#77FF00)/scsi/scsi.c >> { | ||
+ | struct kmem_cache *cmd_slab; | ||
+ | struct kmem_cache *sense_slab; | ||
+ | unsigned int users; | ||
+ | char *cmd_name; | ||
+ | char *sense_name; | ||
+ | unsigned int slab_flags; | ||
+ | gfp_t gfp_mask; | ||
+ | } | ||
+ | scsi_host_cmd_pool --> kmem_cache | ||
+ | |||
+ | |||
+ | class kmem_cache << (S,#77FF00)/linux/slub_def.h >> { | ||
+ | struct kmem_cache_cpu __percpu *cpu_slab; | ||
+ | unsigned long flags; | ||
+ | unsigned long min_partial; | ||
+ | int size; /* The size of an object including meta data */ | ||
+ | int object_size; /* The size of an object without meta data */ | ||
+ | int offset; /* Free pointer offset. */ | ||
+ | int cpu_partial; /* Number of per cpu partial objects to keep around */ | ||
+ | struct kmem_cache_order_objects oo; | ||
+ | struct kmem_cache_order_objects max; | ||
+ | struct kmem_cache_order_objects min; | ||
+ | gfp_t allocflags; /* gfp flags to use on each alloc */ | ||
+ | int refcount; /* Refcount for slab cache destroy */ | ||
+ | void (*ctor)(void *); | ||
+ | int inuse; /* Offset to metadata */ | ||
+ | int align; /* Alignment */ | ||
+ | int reserved; /* Reserved bytes at the end of slabs */ | ||
+ | const char *name; /* Name (only for display!) */ | ||
+ | struct list_head list; /* List of slab caches */ | ||
+ | } | ||
+ | kmem_cache --> kmem_cache_cpu | ||
+ | kmem_cache --> kmem_cache_order_objects | ||
+ | kmem_cache --> list_head | ||
+ | |||
+ | |||
+ | class kmem_cache_cpu << (S,#77FF00)/linux/slub_def.h >> { | ||
+ | void **freelist; /* Pointer to next available object */ | ||
+ | unsigned long tid; /* Globally unique transaction id */ | ||
+ | struct page *page; /* The slab from which we are allocating */ | ||
+ | struct page *partial; /* Partially allocated frozen slabs */ | ||
+ | } | ||
+ | kmem_cache_cpu --> page | ||
+ | |||
+ | |||
+ | |||
+ | class page << (S,#77FF00)/linux/mm_types.h >>{ | ||
+ | unsigned long flags; | ||
+ | union { | ||
+ | struct address_space *mapping; | ||
+ | void *s_mem; | ||
+ | }; | ||
+ | union { | ||
+ | pgoff_t index; | ||
+ | void *freelist; | ||
+ | bool pfmemalloc; | ||
+ | }; | ||
+ | union { | ||
+ | struct list_head lru; | ||
+ | struct page *next; | ||
+ | struct list_head list; | ||
+ | struct slab *slab_page; | ||
+ | struct rcu_head rcu_head; | ||
+ | }; | ||
+ | unsigned long private; | ||
+ | } | ||
+ | page --> address_space | ||
+ | page --> list_head | ||
+ | page --> slab | ||
+ | page --> rcu_head | ||
+ | |||
+ | |||
+ | class address_space << (S,#77FF00)/linux/fs.h >> { | ||
+ | struct inode *host; /* owner: inode, block_device */ | ||
+ | struct radix_tree_root page_tree; /* radix tree of all pages */ | ||
+ | spinlock_t tree_lock; /* and lock protecting it */ | ||
+ | unsigned int i_mmap_writable;/* count VM_SHARED mappings */ | ||
+ | struct rb_root i_mmap; /* tree of private and shared mappings */ | ||
+ | struct list_head i_mmap_nonlinear;/*list VM_NONLINEAR mappings */ | ||
+ | struct mutex i_mmap_mutex; | ||
+ | unsigned long nrpages; /* number of total pages */ | ||
+ | pgoff_t writeback_index;/* writeback starts here */ | ||
+ | const struct address_space_operations *a_ops; /* methods */ | ||
+ | unsigned long flags; /* error bits/gfp mask */ | ||
+ | struct backing_dev_info *backing_dev_info; /* device readahead, etc */ | ||
+ | spinlock_t private_lock; /* for use by the address_space */ | ||
+ | struct list_head private_list; /* ditto */ | ||
+ | void *private_data; | ||
+ | } | ||
+ | address_space --> inode | ||
+ | address_space --> radix_tree_root | ||
+ | address_space --> rb_root | ||
+ | address_space --> list_head | ||
+ | address_space --> mutex | ||
+ | address_space --> backing_dev_info | ||
+ | |||
+ | class radix_tree_root << (S,#77FF00)/linux/radix-tree.h >> { | ||
+ | unsigned int height; | ||
+ | gfp_t gfp_mask; | ||
+ | struct radix_tree_node __rcu *rnode; | ||
+ | } | ||
+ | |||
+ | class radix_tree_node << (S,#77FF00)/linux/radix-tree.c >> { | ||
+ | unsigned int height; | ||
+ | unsigned int count; | ||
+ | union { | ||
+ | struct radix_tree_node *parent; | ||
+ | struct rcu_head rcu_head; | ||
+ | }; | ||
+ | void __rcu *slots[RADIX_TREE_MAP_SIZE]; | ||
+ | unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS]; | ||
+ | } | ||
+ | radix_tree_node --> rcu_head | ||
+ | |||
+ | |||
+ | class rb_root << (S,#77FF00)/linux/rbtree.h >> { | ||
+ | struct rb_node *rb_node; | ||
+ | } | ||
+ | rb_root --> rb_node | ||
+ | |||
+ | |||
+ | class rb_node << (S,#77FF00)/linux/rbtree.h >> { | ||
+ | unsigned long __rb_parent_color; | ||
+ | struct rb_node *rb_right; | ||
+ | struct rb_node *rb_left; | ||
+ | } | ||
+ | |||
+ | class inode << (S,#77FF00)/linux/fs.h >> { | ||
+ | umode_t i_mode; | ||
+ | unsigned short i_opflags; | ||
+ | kuid_t i_uid; | ||
+ | kgid_t i_gid; | ||
+ | unsigned int i_flags; | ||
+ | const struct inode_operations *i_op; | ||
+ | struct super_block *i_sb; | ||
+ | struct address_space *i_mapping; | ||
+ | union { | ||
+ | const unsigned int i_nlink; | ||
+ | unsigned int __i_nlink; | ||
+ | }; | ||
+ | dev_t i_rdev; | ||
+ | loff_t i_size; | ||
+ | struct timespec i_atime; | ||
+ | struct timespec i_mtime; | ||
+ | struct timespec i_ctime; | ||
+ | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
+ | unsigned short i_bytes; | ||
+ | unsigned int i_blkbits; | ||
+ | blkcnt_t i_blocks; | ||
+ | unsigned long i_state; | ||
+ | struct mutex i_mutex; | ||
+ | unsigned long dirtied_when; /* jiffies of first dirtying */ | ||
+ | struct hlist_node i_hash; | ||
+ | struct list_head i_wb_list; /* backing dev IO list */ | ||
+ | struct list_head i_lru; /* inode LRU list */ | ||
+ | struct list_head i_sb_list; | ||
+ | union { | ||
+ | struct hlist_head i_dentry; | ||
+ | struct rcu_head i_rcu; | ||
+ | }; | ||
+ | u64 i_version; | ||
+ | atomic_t i_count; | ||
+ | atomic_t i_dio_count; | ||
+ | atomic_t i_writecount; | ||
+ | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | ||
+ | struct file_lock *i_flock; | ||
+ | struct address_space i_data; | ||
+ | struct list_head i_devices; | ||
+ | __u32 i_generation; | ||
+ | } | ||
+ | inode --> inode_operations | ||
+ | inode --> super_block | ||
+ | inode --> address_space | ||
+ | inode --> timespec | ||
+ | inode --> mutex | ||
+ | inode --> hlist_node | ||
+ | inode --> list_head | ||
+ | inode --> rcu_head | ||
+ | inode --> file_lock | ||
+ | |||
+ | |||
+ | class backing_dev_info << (S,#77FF00)can't find >> { | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | class slab << (S,#77FF00)can't find >> { | ||
+ | |||
+ | } | ||
+ | |||
+ | class kmem_cache_order_objects << (S,#77FF00)/linux/slub_def.h >> { | ||
+ | unsigned long x; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | class scsi_transport_template << (S,#77FF00)/ >> { | ||
+ | |||
+ | } | ||
+ | |||
+ | class blk_queue_tag << (S,#77FF00)/ >> { | ||
+ | |||
+ | } | ||
+ | |||
+ | class scsi_host_state << (S,#77FF00)/ >> { | ||
+ | |||
+ | } | ||
+ | |||
+ | class request_queue << (S,#FF7700)/linux/blkdev.h >> { | ||
+ | struct list_head queue_head | ||
+ | struct request *last_merge; | ||
+ | struct elevator_queue *elevator; | ||
+ | int nr_rqs[2]; | ||
+ | int nr_rqs_elvpriv; | ||
+ | |||
+ | struct request_list root_rl; | ||
+ | request_fn_proc *request_fn; | ||
+ | prep_rq_fn *prep_rq_fn; | ||
+ | unprep_rq_fn *unprep_rq_fn; | ||
+ | merge_bvec_fn *merge_bvec_fn; | ||
+ | softirq_done_fn *softirq_done_fn; | ||
+ | rq_timed_out_fn *rq_timed_out_fn; | ||
+ | dma_drain_needed_fn *dma_drain_needed; | ||
+ | lld_busy_fn *lld_busy_fn; | ||
+ | |||
+ | struct blk_mq_ops *mq_ops; | ||
+ | unsigned int *mq_map; | ||
+ | struct blk_mq_ctx *queue_ctx; | ||
+ | unsigned int nr_hw_queues; | ||
+ | sector_t end_sector; | ||
+ | struct request *boundary_rq; | ||
+ | struct delayed_work delay_work; | ||
+ | struct backing_dev_info backing_dev_info; | ||
+ | void queuedata; | ||
+ | unsigned long queue_flags; | ||
+ | int id; | ||
+ | gfp_t bounce_gfp; | ||
+ | spinlock_t __queue_lock; | ||
+ | spinlock_t *queue_lock; | ||
+ | struct kobject kobj; | ||
+ | struct kobject mq_kobj; | ||
+ | |||
+ | unsigned long nr_requests; | ||
+ | unsigned int nr_congestion_on; | ||
+ | unsigned int nr_congestion_off; | ||
+ | unsigned int nr_batching; | ||
+ | unsigned int dma_drain_size; | ||
+ | void *dma_drain_buffer; | ||
+ | unsigned int dma_pad_mask; | ||
+ | unsigned int dma_alignment; | ||
+ | struct blk_queue_tag *queue_tags; | ||
+ | struct list_head tag_busy_list; | ||
+ | unsigned int nr_sorted; | ||
+ | unsigned int in_flight[2]; | ||
+ | unsigned int request_fn_active; | ||
+ | unsigned int rq_timeout; | ||
+ | struct timer_list timeout; | ||
+ | struct list_head timeout_list; | ||
+ | struct list_head icq_list; | ||
+ | |||
+ | struct queue_limits limits; | ||
+ | unsigned int sg_timeout; | ||
+ | unsigned int sg_reserved_size; | ||
+ | int node; | ||
+ | |||
+ | unsigned int flush_flags; | ||
+ | unsigned int flush_not_queueable:1; | ||
+ | unsigned int flush_queue_delayed:1; | ||
+ | unsigned int flush_pending_idx:1; | ||
+ | unsigned int flush_running_idx:1; | ||
+ | unsigned long flush_pending_since; | ||
+ | struct list_head flush_queue[2]; | ||
+ | struct list_head flush_data_in_flight; | ||
+ | struct request *flush_rq; | ||
+ | spinlock_t mq_flush_lock; | ||
+ | struct mutex sysfs_lock; | ||
+ | int bypass_depth; | ||
+ | |||
+ | struct rcu_head rcu_head; | ||
+ | wait_queue_head_t mq_freeze_wq; | ||
+ | struct percpu_counter mq_usage_counter; | ||
+ | struct list_head all_q_node; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | class device << (S,#FF7700)/linux/device.h >> { | ||
+ | struct device *parent; | ||
+ | struct device_private *p; | ||
+ | struct kobject kobj; | ||
+ | const char *init_name; | ||
+ | const struct device_type *type; | ||
+ | struct mutex mutex; | ||
+ | struct bus_type *bus; | ||
+ | struct device_driver *driver; | ||
+ | void *platform_data; | ||
+ | struct dev_pm_info power; | ||
+ | struct dev_pm_domain *pm_domain; | ||
+ | |||
+ | u64 *dma_mask; | ||
+ | u64 coherent_dma_mask | ||
+ | struct device_dma_parameters *dma_parms; | ||
+ | struct list_head dma_pools; | ||
+ | struct dma_coherent_mem *dma_mem; | ||
+ | struct dev_archdata archdata; | ||
+ | struct device_node *of_node; | ||
+ | struct acpi_dev_node acpi_node; | ||
+ | dev_t devt; | ||
+ | u32 id; | ||
+ | spinlock_t devres_lock; | ||
+ | struct list_head devres_head; | ||
+ | struct klist_node knode_class; | ||
+ | struct class *class; | ||
+ | const struct attribute_group **groups; | ||
+ | void (*release)(struct device *dev); | ||
+ | struct iommu_group *iommu_group; | ||
+ | bool offline_disabled:1; | ||
+ | bool offline:1; | ||
+ | } | ||
+ | |||
+ | |||
+ | class scsi_host_template << (S,#FF7700)/scsi/scsi_host.h >> { | ||
+ | struct module *module; | ||
+ | const char *name; | ||
+ | int (* detect)(struct scsi_host_template *); | ||
+ | int (* release)(struct Scsi_Host *); | ||
+ | const char *(* info)(struct Scsi_Host *); | ||
+ | int (* ioctl)(struct scsi_device *dev, int cmd, void __user *arg); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | class bio << (S,#FF7700)/linux/blk_types.h >> { | ||
+ | struct bio *bi_next; | ||
+ | struct block_device *bi_bdev; | ||
+ | unsigned long bi_flags; | ||
+ | unsigned long bi_rw; | ||
+ | struct bvec_iter bi_iter; | ||
+ | unsigned int bi_phys_segments; | ||
+ | unsigned int bi_seg_front_size; | ||
+ | unsigned int bi_seg_back_size; | ||
+ | atomic_t bi_remaining; | ||
+ | bio_end_io_t *bi_end_io; | ||
+ | void *bi_private; | ||
+ | unsigned short bi_vcnt; | ||
+ | unsigned short bi_max_vecs; | ||
+ | atomic_t bi_cnt; | ||
+ | struct bio_vec *bi_io_vec; | ||
+ | struct bio_set *bi_pool; | ||
+ | struct bio_vec bi_inline_vecs[0]; | ||
+ | } | ||
+ | |||
+ | |||
+ | class bio_list << (S,#FF7700)linux/bio.h >> { | ||
+ | struct bio *head; | ||
+ | struct bio *tail; | ||
+ | } | ||
+ | |||
+ | |||
+ | class request << (S,#FF7700)/linux/blkdev.h >> { | ||
+ | struct list_head queuelist; | ||
+ | union { | ||
+ | struct call_single_data csd; | ||
+ | struct work_struct mq_flush_work; | ||
+ | }; | ||
+ | struct request_queue *q; | ||
+ | struct blk_mq_ctx *mq_ctx; | ||
+ | u64 cmd_flags; | ||
+ | enum rq_cmd_type_bits cmd_type; | ||
+ | unsigned long atomic_flags; | ||
+ | int cpu; | ||
+ | unsigned int __data_len; | ||
+ | sector_t __sector; | ||
+ | struct bio *bio; | ||
+ | struct bio *biotail; | ||
+ | struct hlist_node hash; | ||
+ | union { | ||
+ | struct rb_node rb_node; | ||
+ | void *completion_data; | ||
+ | }; | ||
+ | union { | ||
+ | struct { | ||
+ | struct io_cq *icq; | ||
+ | void *priv[2]; | ||
+ | } elv; | ||
+ | struct { | ||
+ | unsigned int seq; | ||
+ | struct list_head list; | ||
+ | rq_end_io_fn *saved_end_io; | ||
+ | } flush; | ||
+ | }; | ||
+ | struct gendisk *rq_disk; | ||
+ | struct hd_struct *part; | ||
+ | unsigned long start_time; | ||
+ | unsigned short ioprio; | ||
+ | void *special; | ||
+ | char *buffer; | ||
+ | int tag; | ||
+ | int errors; | ||
+ | unsigned char __cmd[BLK_MAX_CDB]; | ||
+ | unsigned char *cmd; | ||
+ | unsigned short cmd_len; | ||
+ | unsigned int extra_len; | ||
+ | unsigned int sense_len; | ||
+ | unsigned int resid_len; | ||
+ | void *sense; | ||
+ | unsigned long deadline; | ||
+ | struct list_head timeout_list; | ||
+ | unsigned int timeout; | ||
+ | int retries; | ||
+ | rq_end_io_fn *end_io; | ||
+ | void *end_io_data; | ||
+ | struct request *next_rq; | ||
+ | } | ||
+ | |||
+ | class blk_plug << (S,#FF7700)/linux/blkdev.h >> { | ||
+ | unsigned long magic; | ||
+ | struct list_head list; | ||
+ | struct list_head mq_list; | ||
+ | struct list_head cb_list; | ||
+ | } | ||
+ | |||
+ | class scsi_device << (S,#FF7700)/scsi/scsi_device >> { | ||
+ | struct Scsi_Host *host; | ||
+ | struct request_queue *request_queue; | ||
+ | struct list_head siblings; | ||
+ | struct list_head same_target_siblings; | ||
+ | unsigned int device_busy; | ||
+ | spinlock_t list_lock; | ||
+ | struct list_head cmd_list; | ||
+ | struct list_head starved_entry; | ||
+ | struct scsi_cmnd *current_cmnd; | ||
+ | unsigned short queue_depth; | ||
+ | unsigned short max_queue_depth; | ||
+ | unsigned short last_queue_full_depth; | ||
+ | unsigned short last_queue_full_count; | ||
+ | unsigned long last_queue_full_time; | ||
+ | unsigned long queue_ramp_up_period; | ||
+ | unsigned long last_queue_ramp_up; | ||
+ | unsigned int id, lun, channel; | ||
+ | unsigned int manufacturer; | ||
+ | unsigned sector_size; | ||
+ | void *hostdata; | ||
+ | char type; | ||
+ | char scsi_level; | ||
+ | char inq_periph_qual; | ||
+ | unsigned char inquiry_len; | ||
+ | unsigned char * inquiry; | ||
+ | const char * vendor; | ||
+ | const char * model; | ||
+ | const char * rev; | ||
+ | unsigned char current_tag; | ||
+ | struct scsi_target *sdev_target; | ||
+ | unsigned int sdev_bflags; | ||
+ | unsigned int eh_timeout; | ||
+ | unsigned writeable:1; | ||
+ | unsigned removable:1; | ||
+ | unsigned changed:1; | ||
+ | unsigned busy:1; | ||
+ | unsigned lockable:1; | ||
+ | unsigned locked:1; | ||
+ | unsigned borken:1; | ||
+ | unsigned disconnect:1; | ||
+ | unsigned soft_reset:1; | ||
+ | unsigned sdtr:1; | ||
+ | unsigned wdtr:1; | ||
+ | unsigned ppr:1; | ||
+ | unsigned tagged_supported:1; | ||
+ | unsigned simple_tags:1; | ||
+ | unsigned ordered_tags:1; | ||
+ | unsigned was_reset:1; | ||
+ | unsigned expecting_cc_ua:1; | ||
+ | unsigned use_10_for_rw:1; | ||
+ | unsigned use_10_for_ms:1; | ||
+ | unsigned no_report_opcodes:1; | ||
+ | unsigned no_write_same:1; | ||
+ | unsigned use_16_for_rw:1; | ||
+ | unsigned skip_ms_page_8:1; | ||
+ | unsigned skip_ms_page_3f:1; | ||
+ | unsigned skip_vpd_pages:1; | ||
+ | unsigned use_192_bytes_for_3f:1; | ||
+ | unsigned no_start_on_add:1; | ||
+ | unsigned allow_restart:1; | ||
+ | unsigned manage_start_stop:1; | ||
+ | unsigned start_stop_pwr_cond:1; | ||
+ | unsigned no_uld_attach:1; | ||
+ | unsigned select_no_atn:1; | ||
+ | unsigned fix_capacity:1; | ||
+ | unsigned guess_capacity:1; | ||
+ | unsigned retry_hwerror:1; | ||
+ | unsigned last_sector_bug:1; | ||
+ | unsigned no_read_disc_info:1; | ||
+ | unsigned no_read_capacity_16:1; | ||
+ | unsigned try_rc_10_first:1; | ||
+ | unsigned is_visible:1; | ||
+ | unsigned wce_default_on:1; | ||
+ | unsigned no_dif:1; | ||
+ | atomic_t disk_events_disable_depth; | ||
+ | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); | ||
+ | DECLARE_BITMAP(pending_events, SDEV_EVT_MAXBITS); | ||
+ | struct list_head event_list; | ||
+ | struct work_struct event_work; | ||
+ | unsigned int device_blocked; | ||
+ | unsigned int max_device_blocked; | ||
+ | } | ||
+ | |||
+ | class scsi_cmnd << (S,#FF7700)/scsi/scsi_cmnd.h >> { | ||
+ | struct scsi_device *device; | ||
+ | struct list_head list; | ||
+ | struct list_head eh_entry; | ||
+ | struct delayed_work abort_work; | ||
+ | int eh_eflags; | ||
+ | unsigned long serial_number; | ||
+ | unsigned long jiffies_at_alloc; | ||
+ | int retries; | ||
+ | int allowed; | ||
+ | unsigned char prot_op; | ||
+ | unsigned char prot_type; | ||
+ | unsigned short cmd_len; | ||
+ | enum dma_data_direction sc_data_direction; | ||
+ | unsigned char *cmnd; | ||
+ | struct scsi_data_buffer sdb; | ||
+ | struct scsi_data_buffer *prot_sdb; | ||
+ | unsigned underflow; | ||
+ | unsigned transfersize; | ||
+ | struct request *request; | ||
+ | unsigned char *sense_buffer; | ||
+ | void (*scsi_done) (struct scsi_cmnd *); | ||
+ | struct scsi_pointer SCp; | ||
+ | unsigned char *host_scribble; | ||
+ | int result; | ||
+ | unsigned char tag; | ||
+ | } | ||
+ | scsi_cmnd --> scsi_pointer | ||
+ | scsi_cmnd --> scsi_device | ||
+ | scsi_cmnd --> list_head | ||
+ | scsi_cmnd --> delayed_work | ||
+ | scsi_cmnd --> scsi_data_buffer | ||
+ | scsi_cmnd --> request | ||
+ | |||
+ | |||
+ | |||
+ | class scsi_pointer << (S,#77FF00)/scsi/scsi_cmnd.h >> { | ||
+ | char *ptr; | ||
+ | int this_residual; | ||
+ | struct scatterlist *buffer; | ||
+ | int buffers_residual; | ||
+ | dma_addr_t dma_handle; | ||
+ | volatile int Status; | ||
+ | volatile int Message; | ||
+ | volatile int have_data_in; | ||
+ | volatile int sent_command; | ||
+ | volatile int phase; | ||
+ | } | ||
+ | scsi_pointer --> scatterlist | ||
+ | |||
+ | |||
+ | |||
+ | class scatterlist << (S,#77FF00)/asm-generic/scatterlist.h >> { | ||
+ | unsigned long page_link; | ||
+ | unsigned int offset; | ||
+ | unsigned int length; | ||
+ | dma_addr_t dma_address; | ||
+ | } | ||
+ | |||
+ | class list_head << (S,#77FF00)/scripts/kconfig/list.h >> { | ||
+ | struct list_head *next, *prev; | ||
+ | } | ||
+ | |||
+ | class delayed_work << (S,#77FF00)/linux/workqueue.h >> { | ||
+ | struct work_struct work; | ||
+ | struct timer_list timer; | ||
+ | struct workqueue_struct *wq; | ||
+ | int cpu; | ||
+ | } | ||
+ | delayed_work --> work_struct | ||
+ | delayed_work --> timer_list | ||
+ | delayed_work --> workqueue_struct | ||
+ | |||
+ | |||
+ | class work_struct << (S,#77FF00)/linux/workqueue.h >> { | ||
+ | atomic_long_t data; | ||
+ | struct list_head entry; | ||
+ | work_func_t func; | ||
+ | } | ||
+ | work_struct --> list_head | ||
+ | |||
+ | class timer_list << (S,#77FF00)/linux/timer.h >> { | ||
+ | struct list_head entry; | ||
+ | unsigned long expires; | ||
+ | struct tvec_base *base; | ||
+ | void (*function)(unsigned long); | ||
+ | unsigned long data; | ||
+ | int slack; | ||
+ | } | ||
+ | timer_list --> tvec_base | ||
+ | |||
+ | |||
+ | class tvec_base << (S,#77FF00)/kernel/timer.c >> { | ||
+ | spinlock_t lock; | ||
+ | struct timer_list *running_timer; | ||
+ | unsigned long timer_jiffies; | ||
+ | unsigned long next_timer; | ||
+ | unsigned long active_timers; | ||
+ | struct tvec_root tv1; | ||
+ | struct tvec tv2; | ||
+ | struct tvec tv3; | ||
+ | struct tvec tv4; | ||
+ | struct tvec tv5; | ||
+ | } | ||
+ | tvec_base --> timer_list | ||
+ | tvec_base --> tvec_root | ||
+ | tvec_base --> tvec | ||
+ | |||
+ | |||
+ | class tvec_root << (S,#77FF00)kernel/timer.c >> { | ||
+ | struct list_head vec[TVR_SIZE]; | ||
+ | } | ||
+ | tvec_root --> list_head | ||
+ | |||
+ | class tvec << (S,#77FF00)kernel/timer.c >> { | ||
+ | struct list_head vec[TVN_SIZE]; | ||
+ | } | ||
+ | tvec --> list_head | ||
+ | |||
+ | class workqueue_struct << (S,#77FF00)/kernel/workqueue.c >> { | ||
+ | struct list_head pwqs; | ||
+ | struct list_head list; | ||
+ | struct mutex mutex; | ||
+ | int work_color; | ||
+ | int flush_color; | ||
+ | atomic_t nr_pwqs_to_flush; | ||
+ | struct wq_flusher *first_flusher; | ||
+ | struct list_head flusher_queue; | ||
+ | struct list_head flusher_overflow; | ||
+ | struct list_head maydays; | ||
+ | struct worker *rescuer; | ||
+ | int nr_drainers; | ||
+ | int saved_max_active; | ||
+ | struct workqueue_attrs *unbound_attrs; | ||
+ | struct pool_workqueue *dfl_pwq; | ||
+ | } | ||
+ | workqueue_struct --> list_head | ||
+ | workqueue_struct --> mutex | ||
+ | workqueue_struct --> wq_flusher | ||
+ | workqueue_struct --> worker | ||
+ | workqueue_struct --> workqueue_attrs | ||
+ | workqueue_struct --> pool_workqueue | ||
+ | |||
+ | |||
+ | class mutex <<(S,#77FF00)/linux/mutex.h >> { | ||
+ | atomic_t count; | ||
+ | spinlock_t wait_lock; | ||
+ | struct list_head wait_list; | ||
+ | } | ||
+ | mutex --> list_head | ||
+ | |||
+ | |||
+ | class wq_flusher << (S,#77FF00)/kernel/workqueue.c >> { | ||
+ | struct list_head list; | ||
+ | int flush_color; | ||
+ | struct completion done; | ||
+ | } | ||
+ | wq_flusher --> list_head | ||
+ | wq_flusher --> completion | ||
+ | |||
+ | |||
+ | class completion << (S,#77FF00)/linux/completion.h >> { | ||
+ | unsigned int done; | ||
+ | wait_queue_head_t wait; | ||
+ | } | ||
+ | |||
+ | class worker << (S,#77FF00)/kernel/workqueue_internal.h >> { | ||
+ | union { | ||
+ | struct list_head entry; | ||
+ | struct hlist_node hentry; | ||
+ | }; | ||
+ | struct work_struct *current_work; | ||
+ | work_func_t current_func; | ||
+ | struct pool_workqueue *current_pwq; | ||
+ | bool desc_valid; | ||
+ | struct list_head scheduled; | ||
+ | struct task_struct *task; | ||
+ | struct worker_pool *pool; | ||
+ | unsigned long last_active; | ||
+ | unsigned int flags; | ||
+ | int id; | ||
+ | struct workqueue_struct *rescue_wq; | ||
+ | } | ||
+ | worker --> list_head | ||
+ | worker --> hlist_node | ||
+ | worker --> work_struct | ||
+ | worker --> pool_workqueue | ||
+ | worker --> worker_pool | ||
+ | worker --> task_struct | ||
+ | worker --> workqueue_struct | ||
+ | |||
+ | class hlist_node << (S,#77FF00)/linux/types.h >> { | ||
+ | struct hlist_node *next, **pprev; | ||
+ | } | ||
+ | |||
+ | class worker_pool << (S,#77FF00)/kernel/workqueue.c >> { | ||
+ | spinlock_t lock; | ||
+ | int cpu; | ||
+ | int node; | ||
+ | int id; | ||
+ | unsigned int flags; | ||
+ | struct list_head worklist; | ||
+ | int nr_workers; | ||
+ | int nr_idle; | ||
+ | struct list_head idle_list; | ||
+ | struct timer_list idle_timer; | ||
+ | struct timer_list mayday_timer; | ||
+ | } | ||
+ | worker_pool --> list_head | ||
+ | worker_pool --> timer_list | ||
+ | |||
+ | |||
+ | class workqueue_attrs << (S,#77FF00)/linux/workqueue.h >> { | ||
+ | int nice; | ||
+ | cpumask_var_t cpumask; | ||
+ | bool no_numa; | ||
+ | } | ||
+ | |||
+ | class pool_workqueue << (S,#77FF00)/linux/workqueue.c >> { | ||
+ | struct worker_pool *pool; | ||
+ | struct workqueue_struct *wq; | ||
+ | int work_color; | ||
+ | int flush_color; | ||
+ | int refcnt; | ||
+ | int nr_in_flight[WORK_NR_COLORS]; | ||
+ | int nr_active; | ||
+ | int max_active; | ||
+ | struct list_head delayed_works; | ||
+ | struct list_head pwqs_node; | ||
+ | struct list_head mayday_node; | ||
+ | struct work_struct unbound_release_work; | ||
+ | struct rcu_head rcu; | ||
+ | } | ||
+ | pool_workqueue --> worker_pool | ||
+ | pool_workqueue --> workqueue_struct | ||
+ | pool_workqueue --> list_head | ||
+ | pool_workqueue --> work_struct | ||
+ | pool_workqueue --> rcu_head | ||
+ | |||
+ | |||
+ | |||
+ | class rcu_head << (S,#77FF00)/linux/types.h >> { | ||
+ | #define rcu_head callback_head | ||
+ | } | ||
+ | rcu_head --> callback_head | ||
+ | |||
+ | |||
+ | |||
+ | class callback_head << (S,#77FF00)/linux/types.h >> { | ||
+ | struct callback_head *next; | ||
+ | void (*func)(struct callback_head *head); | ||
+ | } | ||
+ | |||
+ | |||
+ | class scsi_data_buffer << (S,#77FF00)/scsi/scsi_cmnd >> { | ||
+ | struct sg_table table; | ||
+ | unsigned length; | ||
+ | int resid; | ||
+ | } | ||
+ | scsi_data_buffer --> sg_table | ||
+ | |||
+ | |||
+ | class sg_table << (S,#77FF00)/linux/scatterlist.h >> { | ||
+ | struct scatterlist *sgl; | ||
+ | unsigned int nents; | ||
+ | unsigned int orig_nents; | ||
+ | } | ||
+ | sg_table --> scatterlist | ||
+ | |||
+ | |||
+ | |||
+ | class task_struct << (S,#77FF00)/linux/sched.h >> { | ||
+ | volatile long state; | ||
+ | void *stack; | ||
+ | atomic_t usage; | ||
+ | unsigned int flags; | ||
+ | unsigned int ptrace; | ||
+ | int on_rq; | ||
+ | int prio, static_prio, normal_prio; | ||
+ | unsigned int rt_priority; | ||
+ | const struct sched_class *sched_class; | ||
+ | struct sched_entity se; | ||
+ | struct sched_rt_entity rt; | ||
+ | struct sched_dl_entity dl; | ||
+ | unsigned int policy; | ||
+ | int nr_cpus_allowed; | ||
+ | cpumask_t cpus_allowed; | ||
+ | int exit_state; | ||
+ | int exit_code, exit_signal; | ||
+ | int pdeath_signal; | ||
+ | unsigned int jobctl; | ||
+ | unsigned int personality; | ||
+ | unsigned in_execve:1; | ||
+ | unsigned in_iowait:1; | ||
+ | unsigned no_new_privs:1; | ||
+ | unsigned sched_reset_on_fork:1; | ||
+ | unsigned sched_contributes_to_load:1; | ||
+ | pid_t pid; | ||
+ | pid_t tgid; | ||
+ | struct task_struct __rcu *real_parent; | ||
+ | struct task_struct __rcu *parent; | ||
+ | struct list_head children; | ||
+ | struct list_head sibling; | ||
+ | struct task_struct *group_leader; | ||
+ | struct list_head ptraced; | ||
+ | struct list_head ptrace_entry; | ||
+ | struct pid_link pids[PIDTYPE_MAX]; | ||
+ | struct list_head thread_group; | ||
+ | struct list_head thread_node; | ||
+ | struct completion *vfork_done; | ||
+ | int __user *set_child_tid; | ||
+ | int __user *clear_child_tid; | ||
+ | cputime_t utime, stime, utimescaled, stimescaled; | ||
+ | cputime_t gtime; | ||
+ | unsigned long nvcsw, nivcsw; | ||
+ | struct timespec start_time; | ||
+ | struct timespec real_start_time; | ||
+ | unsigned long min_flt, maj_flt; | ||
+ | struct task_cputime cputime_expires; | ||
+ | struct list_head cpu_timers[3]; | ||
+ | const struct cred __rcu *real_cred; | ||
+ | const struct cred __rcu *cred; | ||
+ | char comm[TASK_COMM_LEN]; | ||
+ | int link_count, total_link_count; | ||
+ | struct thread_struct thread; | ||
+ | struct fs_struct *fs; | ||
+ | struct files_struct *files; | ||
+ | struct nsproxy *nsproxy; | ||
+ | struct signal_struct *signal; | ||
+ | struct sighand_struct *sighand; | ||
+ | sigset_t blocked, real_blocked; | ||
+ | sigset_t saved_sigmask; | ||
+ | struct sigpending pending; | ||
+ | unsigned long sas_ss_sp; | ||
+ | size_t sas_ss_size; | ||
+ | int (*notifier)(void *priv); | ||
+ | void *notifier_data; | ||
+ | sigset_t *notifier_mask; | ||
+ | struct callback_head *task_works; | ||
+ | struct audit_context *audit_context; | ||
+ | struct seccomp seccomp; | ||
+ | u32 parent_exec_id; | ||
+ | u32 self_exec_id; | ||
+ | spinlock_t alloc_lock; | ||
+ | raw_spinlock_t pi_lock; | ||
+ | struct reclaim_state *reclaim_state; | ||
+ | struct backing_dev_info *backing_dev_info; | ||
+ | struct io_context *io_context; | ||
+ | unsigned long ptrace_message; | ||
+ | siginfo_t *last_siginfo; | ||
+ | struct task_io_accounting ioac; | ||
+ | struct rcu_head rcu; | ||
+ | struct pipe_inode_info *splice_pipe; | ||
+ | struct page_frag task_frag; | ||
+ | int nr_dirtied; | ||
+ | int nr_dirtied_pause; | ||
+ | unsigned long dirty_paused_when; | ||
+ | unsigned long timer_slack_ns; | ||
+ | unsigned long default_timer_slack_ns; | ||
+ | } | ||
+ | task_struct --> sched_class | ||
+ | task_struct --> sched_entity | ||
+ | task_struct --> sched_rt_entity | ||
+ | task_struct --> sched_dl_entity | ||
+ | task_struct --> list_head | ||
+ | task_struct --> pid_link | ||
+ | task_struct --> completion | ||
+ | task_struct --> timespec | ||
+ | task_struct --> task_cputime | ||
+ | task_struct --> thread_struct | ||
+ | task_struct --> fs_struct | ||
+ | task_struct --> files_struct | ||
+ | task_struct --> nsproxy | ||
+ | task_struct --> signal_struct | ||
+ | task_struct --> sighand_struct | ||
+ | task_struct --> sigpending | ||
+ | task_struct --> callback_head | ||
+ | task_struct --> audit_context | ||
+ | task_struct --> seccomp | ||
+ | task_struct --> reclaim_state | ||
+ | task_struct --> backing_dev_info | ||
+ | task_struct --> io_context | ||
+ | task_struct --> task_io_accounting | ||
+ | task_struct --> rcu_head | ||
+ | task_struct --> pipe_inode_info | ||
+ | task_struct --> page_frag | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </uml> |
2014년 5월 12일 (월) 06:28 판
[An error occured in PlantUML extension]