Date: Tue, 29 Sep 2015 22:33:27 +0000 (UTC) From: Navdeep Parhar <np@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r288404 - projects/cxl_iscsi/sys/dev/cxgbe/cxgbei Message-ID: <201509292233.t8TMXR2G017566@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: np Date: Tue Sep 29 22:33:26 2015 New Revision: 288404 URL: https://svnweb.freebsd.org/changeset/base/288404 Log: - Allocate more space than needed for icl_conn and icl_pdu. The extra space will be used for driver specific items. - Do not use the same name as icl_soft for the PDU zone. Modified: projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.h projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/icl_cxgbei.c Modified: projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.h ============================================================================== --- projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.h Tue Sep 29 22:00:03 2015 (r288403) +++ projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.h Tue Sep 29 22:33:26 2015 (r288404) @@ -1,9 +1,7 @@ /*- - * Copyright (c) 2012 Chelsio Communications, Inc. + * Copyright (c) 2012, 2015 Chelsio Communications, Inc. * All rights reserved. * - * Chelsio T5xx iSCSI driver - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -29,6 +27,8 @@ #ifndef __CXGBEI_OFLD_H__ #define __CXGBEI_OFLD_H__ +#include <dev/iscsi/icl.h> + struct iscsi_socket { u_char s_dcrc_len; void *s_conn; /* ic_conn pointer */ @@ -52,6 +52,20 @@ struct iscsi_socket { struct mbuf *mbuf_ulp_ldata; }; +struct icl_cxgbei_conn { + struct icl_conn ic; + + /* cxgbei specific stuff goes here. */ + uint32_t icc_signature; +}; + +struct icl_cxgbei_pdu { + struct icl_pdu ip; + + /* cxgbei specific stuff goes here. */ + uint32_t icp_signature; +}; + struct cxgbei_sgl { int sg_flag; void *sg_addr; @@ -123,9 +137,6 @@ struct cxgbei_data { struct cxgbei_ulp2_tag_format tag_format; }; -struct icl_conn; -struct icl_pdu; - struct ulp_mbuf_cb *get_ulp_mbuf_cb(struct mbuf *); int cxgbei_conn_handoff(struct icl_conn *); int cxgbei_conn_close(struct icl_conn *); Modified: projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/icl_cxgbei.c ============================================================================== --- projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/icl_cxgbei.c Tue Sep 29 22:00:03 2015 (r288403) +++ projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/icl_cxgbei.c Tue Sep 29 22:33:26 2015 (r288404) @@ -1,5 +1,6 @@ /*- * Copyright (c) 2012 The FreeBSD Foundation + * Copyright (c) 2015 Chelsio Communications, Inc. * All rights reserved. * * This software was developed by Edward Tomasz Napierala under sponsorship @@ -83,7 +84,7 @@ static int recvspace = 1048576; SYSCTL_INT(_kern_icl_cxgbei, OID_AUTO, recvspace, CTLFLAG_RWTUN, &recvspace, 0, "Default receive socket buffer size"); -static uma_zone_t icl_pdu_zone; +static uma_zone_t icl_cxgbei_pdu_zone; static uma_zone_t icl_transfer_zone; static volatile u_int icl_cxgbei_ncons; @@ -126,28 +127,32 @@ static kobj_method_t icl_cxgbei_methods[ { 0, 0 } }; -DEFINE_CLASS(icl_cxgbei, icl_cxgbei_methods, sizeof(struct icl_conn)); +DEFINE_CLASS(icl_cxgbei, icl_cxgbei_methods, sizeof(struct icl_cxgbei_conn)); struct icl_pdu * icl_pdu_new_empty(struct icl_conn *ic, int flags); void icl_pdu_free(struct icl_pdu *ip); +#define CXGBEI_PDU_SIGNATURE 0x12344321 + struct icl_pdu * icl_pdu_new_empty(struct icl_conn *ic, int flags) { + struct icl_cxgbei_pdu *icp; struct icl_pdu *ip; #ifdef DIAGNOSTIC refcount_acquire(&ic->ic_outstanding_pdus); #endif - ip = uma_zalloc(icl_pdu_zone, flags | M_ZERO); - if (ip == NULL) { - ICL_WARN("failed to allocate %zd bytes", sizeof(*ip)); + icp = uma_zalloc(icl_cxgbei_pdu_zone, flags | M_ZERO); + if (icp == NULL) { #ifdef DIAGNOSTIC refcount_release(&ic->ic_outstanding_pdus); #endif return (NULL); } + icp->icp_signature = CXGBEI_PDU_SIGNATURE; + ip = &icp->ip; ip->ip_conn = ic; return (ip); @@ -157,13 +162,16 @@ void icl_pdu_free(struct icl_pdu *ip) { struct icl_conn *ic; + struct icl_cxgbei_pdu *icp; + icp = (void *)ip; + MPASS(icp->icp_signature == CXGBEI_PDU_SIGNATURE); ic = ip->ip_conn; m_freem(ip->ip_bhs_mbuf); m_freem(ip->ip_ahs_mbuf); m_freem(ip->ip_data_mbuf); - uma_zfree(icl_pdu_zone, ip); + uma_zfree(icl_cxgbei_pdu_zone, ip); #ifdef DIAGNOSTIC refcount_release(&ic->ic_outstanding_pdus); #endif @@ -411,15 +419,21 @@ icl_cxgbei_conn_pdu_queue(struct icl_con icl_pdu_queue(ip); } +#define CXGBEI_CONN_SIGNATURE 0x56788765 + static struct icl_conn * icl_cxgbei_new_conn(const char *name, struct mtx *lock) { + struct icl_cxgbei_conn *icc; struct icl_conn *ic; refcount_acquire(&icl_cxgbei_ncons); - ic = (struct icl_conn *)kobj_create(&icl_cxgbei_class, M_CXGBE, M_WAITOK | M_ZERO); + icc = (struct icl_cxgbei_conn *)kobj_create(&icl_cxgbei_class, M_CXGBE, + M_WAITOK | M_ZERO); + icc->icc_signature = CXGBEI_CONN_SIGNATURE; + ic = &icc->ic; STAILQ_INIT(&ic->ic_to_send); ic->ic_lock = lock; cv_init(&ic->ic_send_cv, "icl_cxgbei_tx"); @@ -437,10 +451,13 @@ icl_cxgbei_new_conn(const char *name, st void icl_cxgbei_conn_free(struct icl_conn *ic) { + struct icl_cxgbei_conn *icc = (void *)ic; + + MPASS(icc->icc_signature == CXGBEI_CONN_SIGNATURE); cv_destroy(&ic->ic_send_cv); cv_destroy(&ic->ic_receive_cv); - kobj_delete((struct kobj *)ic, M_CXGBE); + kobj_delete((struct kobj *)icc, M_CXGBE); refcount_release(&icl_cxgbei_ncons); } @@ -740,8 +757,8 @@ icl_cxgbei_load(void) { int error; - icl_pdu_zone = uma_zcreate("icl_pdu", - sizeof(struct icl_pdu), NULL, NULL, NULL, NULL, + icl_cxgbei_pdu_zone = uma_zcreate("icl_cxgbei_pdu", + sizeof(struct icl_cxgbei_pdu), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); icl_transfer_zone = uma_zcreate("icl_transfer", 16 * 1024, NULL, NULL, NULL, NULL, @@ -749,12 +766,8 @@ icl_cxgbei_load(void) refcount_init(&icl_cxgbei_ncons, 0); - /* - * The reason we call this "none" is that to the user, - * it's known as "offload driver"; "offload driver: soft" - * doesn't make much sense. - */ - error = icl_register("cxgbei", 100, icl_cxgbei_limits, icl_cxgbei_new_conn); + error = icl_register("cxgbei", 100, icl_cxgbei_limits, + icl_cxgbei_new_conn); KASSERT(error == 0, ("failed to register")); return (error); @@ -769,7 +782,7 @@ icl_cxgbei_unload(void) icl_unregister("cxgbei"); - uma_zdestroy(icl_pdu_zone); + uma_zdestroy(icl_cxgbei_pdu_zone); uma_zdestroy(icl_transfer_zone); return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509292233.t8TMXR2G017566>