void sg_init_table(struct scatterlist *sgl, unsigned int nents) { memset(sgl, 0, sizeof(*sgl) * nents); sg_init_marker(sgl, nents); } static inline void sg_init_marker(struct scatterlist *sgl, unsigned int nents) { sg_mark_end(&sgl[nents - 1]); } __sg_alloc_table被调用...
void sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen) 将指定长度的buffer赋给scatterlist。 void sg_init_table(struct scatterlist *sgl, unsigned int nents) 初始化一个sgl聚散表,nents为有效的内存块个数。 void sg_init_one(struct scatterlist sg, const void *buf, unsig...
2.1.5build_cipher_test_sglists 该函数用于创建加解密源数据以及目的数据的sglist,其中它们指向的内存为step 3分配的buffer。其主要工作如下: (1)根据sglist包含的entry数量,通过sg_init_table函数初始化数据结构 (2)通过sg_set_buf函数设置每一个entry对应的内存buffer (3)通过sg_mark_end函数标记sglist的结束...
网络数据的传输在驱动中通过start_xmit函数来实现; xmit_skb函数中,sg_init_table初始化sg列表,sg_set_buf将sg指向特定的buffer,skb_to_sgvec将socket buffer中的数据填充sg; 通过virtqueue_add_outbuf将sg添加到Virtqueue中,并更新Avail队列中描述符的索引值; virtqueue_notify通知Device,可以过来取数据了; 3.3.3...
xmit_skb函数中,sg_init_table初始化sg列表,sg_set_buf将sg指向特定的buffer,skb_to_sgvec将socket buffer中的数据填充sg; 通过virtqueue_add_outbuf将sg添加到Virtqueue中,并更新Avail队列中描述符的索引值; virtqueue_notify通知Device,可以过来取数据了; ...
struct sg_table *pages; ... }; 1. 2. 3. 4. 5. 6. 7. 为了可以被GPU访问,BO使用的内存页面还要映射到GTT。这个映射过程也比较直接,就是将BO所在的页面填入到GTT的表项中。 综上,我们看到,BO本质上就是一块共享内存,对于CPU来说BO与其他内存没有任何差别,但是BO又是特别的,...
其次降级为内核发送消息 iov_iter_kvec sock_sendmsg(sock, msg) memalloc_noreclaim_restore iscsi_tcp_get_curr_r2t conn->session->tt->alloc_pdu iscsi_prep_data_out_pdu -> 初始化 Data-Out hdr->ttt = r2t->ttt hdr->opcode = ISCSI_OP_SCSI_DATA_OUT rc = conn->session->tt->init_pdu ...
init = sugov_init, .exit = sugov_exit, .start = sugov_start, .stop = sugov_stop, .limits = sugov_limits, }; static void sugov_limits(struct cpufreq_policy *policy) { struct sugov_policy *sg_policy = policy->governor_data; if (!policy->fast_switch_enabled) { mutex_lock(&sg...
sg_init_table(sg, count); for (i = 0; i < count; i++, sg++) { for (i = 0; i < count; i++, sg = sg_next(sg)) { addr = (void *) get_zeroed_page(GFP_KERNEL); if (!addr) { zfcp_fc_sg_free_table(sg, i); Expand Down 41 changes: 18 additions & 23 deletions...
(structgendisk *);int(*revalidate_disk) (structgendisk *);int(*getgeo)(structblock_device *,structhd_geometry *);/* this callback is with swap_lock and sometimes page table lock held */void(*swap_slot_free_notify) (structblock_device *,unsignedlong);structmodule*owner;conststructpr_...