Warning: copy(http://www.plantuml.com/plantuml/img/dJpPajmsak_r5ToOXrLNj2mVi-DTbyCHiYNFAAp38MczXqA1O95W5TmiaasGrTsUw7_VF00G5rjQzqCNcOaZ0UI5H8ARJTMMMXV5kqehyOzUJzz_NpnwT_cNdt_-zjillxnueW5E_yGHa5ySYnz-AFwvqTCuLrFHAZs9eophGeXQdbKbzIw7cyhn82UzA_ZF5d7DYkfKYw7lss9hdw2TGNLjNrs9gMX6AGKrY81C5wx0haYH6he_ovhnVhErRCgvTOqkY2qH5VHrcYTv2nINdQ37317oIEEuTgYfr5V2F6y1NNPrAqU7hlhJqCf9zHrXHLdXysvpKwf9NCzobjGkq4Fa87YNJjqaePLoaanqL68QoquF_UWNSx2bxBwzCXrEvQ7Oxg-dtTnfTUXaNQZEzB-VzTrkayARKhMoDckRmSF8T7MKzMnAPOfq_Mw3Br2qXX6tgfDUJstV7GhWqacCKiifek5KtWfLPu3jt6MW5Qn29zi8CtSAnX-seuymHrm7LhML7TCu7PMcWlY2x40J1rD9nObzvSYTCoZeI1zWYlUjrEeFkLPW6Flf4wMGAYshgHzrF57rgHJxVkxgShoBSKYTbgCgMz7DfptoeYk0t7UMujJNyhklFVZSmU9LLo0_IfS2Ml_kAn-hfQZQMK_GQdT8KCXOKtKTm6d5jMmRmFROS80TvLcEKBCVwxH90W8bmAK17FYcwu4vvfCCu5qlRaOrIQ5Bni3gZyLDFmAxYmvW7xx-ygEJ0eIp55YPvP8F59XEZR25CXB3uyjmuGDeMlsg7CgzQjMafB_0H3uLECpb2FDmDqX7tIY1DcqqHx6TzL1M4aJcEY2E-61VwaJ0L2zGASIzTM85WNoM5wP2ZT2Z10xpr1GeOL0-UdbsTBFXCAY3xE3zqhp1OqRFwYFePdaegpkZqi-zgekjgL9EPTpq5ccbji8XOmKi_m6Pu7xZJ63n-F4FItyHF3LQKG4o3n in /var/www/dislab.hufs.ac.kr/wiki4lab/extensions/PlantUML/PlantUML.php on line 237
SYTest - Retired DISLab

SYTest

(버전 사이의 차이)
이동: 둘러보기, 찾기
(새 문서: test)
 
1번째 줄: 1번째 줄:
test
+
<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]

개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기