diff --git a/.travis.yml b/.travis.yml
index 4157956..5d324e0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,14 @@ dist: trusty
language: c
compiler: gcc
before_install:
+ - sudo dpkg --add-architecture i386
- sudo apt-get -qq update
- - sudo apt-get --assume-yes install gcc help2man git make zlib1g-dev
+ - sudo apt-cache search zlib
+ - sudo apt-get --assume-yes install gcc help2man git make zlib1g-dev libc6-dev-i386 zlib1g-dev:i386
+ - ls -l /usr/include/z*.h
script:
- - make
+ - make FORCE_32BIT=1 V=2 -j4
+ - make clean
+ - make -j4
- make test_software
+ - make clean
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..500eaad
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,28 @@
+Developer's Certificate of Origin 1.1
+
+ By making a contribution to this project, I certify that:
+
+ (a) The contribution was created in whole or in part by me and I
+ have the right to submit it under the open source license
+ indicated in the file; or
+
+ (b) The contribution is based upon previous work that, to the best
+ of my knowledge, is covered under an appropriate open source
+ license and I have the right under that license to submit that
+ work with modifications, whether created in whole or in part
+ by me, under the same open source license (unless I am
+ permitted to submit under a different license), as indicated
+ in the file; or
+
+ (c) The contribution was provided directly to me by some other
+ person who certified (a), (b) or (c) and I have not modified
+ it.
+
+ (d) I understand and agree that this project and the contribution
+ are public and that a record of the contribution (including all
+ personal information I submit with it, including my sign-off) is
+ maintained indefinitely and may be redistributed consistent with
+ this project or the open source license(s) involved.
+
+The developer sign-off should include the reference to the DCO (example below):
+DCO 1.1 Signed-off-by: Random J Developer <random@developer.org>
diff --git a/include/deflate_fifo.h b/include/deflate_fifo.h
index 5415c29..0bbe397 100644
--- a/include/deflate_fifo.h
+++ b/include/deflate_fifo.h
@@ -38,6 +38,10 @@
#define ZEDC_FIFO_SIZE 256
#define ZEDC_FIFO_MASK (ZEDC_FIFO_SIZE - 1)
+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
+#endif
+
struct zedc_fifo {
unsigned int push; /* push into FIFO here */
unsigned int pop; /* pop from FIFO here */
@@ -83,11 +87,11 @@ static inline int fifo_push32(struct zedc_fifo *fifo, uint32_t data)
uint8_t u8[4];
} d;
- if (fifo_free(fifo) < 4)
+ if (fifo_free(fifo) < ARRAY_SIZE(d.u8))
return 0;
d.u32 = data;
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < ARRAY_SIZE(d.u8); i++) {
fifo->fifo[fifo->push] = d.u8[i];
fifo->push = (fifo->push + 1) & ZEDC_FIFO_MASK;
}
@@ -112,10 +116,10 @@ static inline int fifo_pop16(struct zedc_fifo *fifo, uint16_t *data)
uint8_t u8[2];
} d;
- if (fifo_used(fifo) < 2)
+ if (fifo_used(fifo) < ARRAY_SIZE(d.u8))
return 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_SIZE(d.u8); i++)
fifo_pop(fifo, &d.u8[i]);
*data = d.u16;
diff --git a/lib/ddcb_capi.c b/lib/ddcb_capi.c
index 323b2ca..9289996 100644
--- a/lib/ddcb_capi.c
+++ b/lib/ddcb_capi.c
@@ -432,8 +432,9 @@ static int __afu_open(struct dev_ctx *ctx)
rc = cxl_get_cr_device(ctx->afu_h, 0, &ctx->cr_device);
if (rc == 0) {
if (ctx->cr_device != CGZIP_CR_DEVICE) {
- VERBOSE0(" [%s] ERR: device_id: %ld/%d\n",
- __func__, (unsigned long)ctx->cr_device,
+ VERBOSE1(" [%s] WARNING: device_id: %ld/%d "
+ "skipping, no CGZIP card\n", __func__,
+ (unsigned long)ctx->cr_device,
CGZIP_CR_VENDOR);
rc = DDCB_ERR_CARD;
goto err_afu_free;
diff --git a/lib/ddcb_card.c b/lib/ddcb_card.c
index d1ee60a..bffe230 100644
--- a/lib/ddcb_card.c
+++ b/lib/ddcb_card.c
@@ -109,7 +109,7 @@ static uint64_t _card_get_frequency(void *card_data)
if (speed >= ARRAY_SIZE(speed_grade))
return 0; /* illegal value */
- return speed_grade[speed] * 1000000; /* in Hz */
+ return speed_grade[speed] * (uint64_t)1000000; /* in Hz */
}
static void card_dump_hardware_version(void *card_data, FILE *fp)
diff --git a/lib/deflate.c b/lib/deflate.c
index f1e4ddf..4299878 100644
--- a/lib/deflate.c
+++ b/lib/deflate.c
@@ -292,6 +292,9 @@ int zedc_deflateSetDictionary(zedc_streamp strm,
if (dictLength > ZEDC_DICT_LEN)
return ZEDC_STREAM_ERROR;
+ if (dictionary == NULL)
+ return ZEDC_STREAM_ERROR;
+
memcpy(&strm->wsp->dict[0], dictionary, dictLength);
strm->dict_len = dictLength;
strm->dict_adler32 = __adler32(1, dictionary, dictLength);
diff --git a/lib/hardware.c b/lib/hardware.c
index f7631b7..e695118 100644
--- a/lib/hardware.c
+++ b/lib/hardware.c
@@ -99,8 +99,10 @@ static int zlib_xcheck = 1;
static unsigned int zlib_ibuf_total = CONFIG_DEFLATE_BUF_SIZE;
static unsigned int zlib_obuf_total = CONFIG_INFLATE_BUF_SIZE;
+#define ZEDC_CARDS_LENGTH 128
+
/* Try to cache filehandles for faster access. Do not close them. */
-static zedc_handle_t zedc_cards[128 + 1];
+static zedc_handle_t zedc_cards[ZEDC_CARDS_LENGTH + 1];
static zedc_handle_t __zedc_open(int card_no, int card_type, int mode,
int *err_code)
@@ -112,15 +114,15 @@ static zedc_handle_t __zedc_open(int card_no, int card_type, int mode,
err_code);
if (card_no == -1) {
- if (zedc_cards[128])
- return zedc_cards[128];
+ if (zedc_cards[ZEDC_CARDS_LENGTH])
+ return zedc_cards[ZEDC_CARDS_LENGTH];
- zedc_cards[128] = zedc_open(card_no, card_type, mode,
+ zedc_cards[ZEDC_CARDS_LENGTH] = zedc_open(card_no, card_type, mode,
err_code);
- return zedc_cards[128];
+ return zedc_cards[ZEDC_CARDS_LENGTH];
}
- if (card_no < 0 || card_no >= 128)
+ if (card_no < 0 || card_no >= ZEDC_CARDS_LENGTH)
return NULL;
if (zedc_cards[card_no] != NULL) {
@@ -169,11 +171,29 @@ static void stream_zlib_to_zedc(zedc_streamp h, z_streamp s)
/**
* Take care CRC/ADLER is correctly reported to the upper levels.
*/
-static void __fixup_crc_or_adler( z_streamp s, zedc_streamp h)
+static void __fixup_crc_or_adler(z_streamp s, zedc_streamp h)
{
s->adler = (h->format == ZEDC_FORMAT_GZIP) ? h->crc32 : h->adler32;
}
+/**
+ * See #152 The adler32 start value is 1 according to the specification.
+ * If there was a call to deflateSetDictionary() the adler field in s
+ * will be set to the adler32 value of the passed in dictionary.
+ * Nevertheless the data processing needs to start with a 1. This
+ * function takes are that on the 1st call of deflate when total_in
+ * is still 0, we set the start value always to 1.
+ */
+static void __prep_crc_or_adler(z_streamp s, zedc_streamp h)
+{
+ if (s->total_in == 0) {
+ if (h->format == ZEDC_FORMAT_ZLIB)
+ s->adler = 1;
+ else
+ s->adler = 0;
+ }
+}
+
static void __free(void *ptr)
{
if (ptr == NULL)
@@ -456,7 +476,10 @@ int h_deflateSetDictionary(z_streamp strm, const uint8_t *dictionary,
h = &s->h;
rc = zedc_deflateSetDictionary(h, dictionary, dictLength);
+ hw_trace("[%p] adler32=%08x dict_adler32=%08x\n", strm,
+ h->adler32, h->dict_adler32);
+ strm->adler = h->dict_adler32; /* See #152 */
return rc_zedc_to_libz(rc);
}
@@ -608,10 +631,11 @@ int h_deflate(z_streamp strm, int flush)
return s->rc;
}
+ __prep_crc_or_adler(strm, h);
hw_trace("[%p] h_deflate: flush=%s avail_in=%d avail_out=%d "
- "ibuf_avail=%d obuf_avail=%d\n",
+ "ibuf_avail=%d obuf_avail=%d adler32/cr32=%08x/%08x\n",
strm, flush_to_str(flush), strm->avail_in, strm->avail_out,
- (int)s->ibuf_avail, (int)s->obuf_avail);
+ (int)s->ibuf_avail, (int)s->obuf_avail, h->adler32, h->crc32);
do {
hw_trace("[%p] *** loop=%d flush=%s\n", strm, loops,
@@ -1291,7 +1315,7 @@ static inline int __check_stream_end(z_streamp strm)
sync_avail_in:
/*
* Only if we saw Z_STREAM_END and no problems understanding
- * the empty HUFFMAN or COPY_BLOCKs arised, we sync up the
+ * the empty HUFFMAN or COPY_BLOCKs arose, we sync up the
* stream.
*
* For DEFLATE and ZLIB we need to read the adler32 or
@@ -1671,7 +1695,7 @@ void zedc_hw_done(void)
if ((flags & ZLIB_FLAG_CACHE_HANDLES) == 0x0)
return;
- for (card_no = 0; card_no <= 128; card_no++) {
+ for (card_no = 0; card_no <= ZEDC_CARDS_LENGTH; card_no++) {
if (zedc_cards[card_no] == NULL)
continue;
zedc_close(zedc_cards[card_no]);
diff --git a/lib/inflate.c b/lib/inflate.c
index e25fa7b..9e2762c 100644
--- a/lib/inflate.c
+++ b/lib/inflate.c
@@ -965,30 +965,30 @@ int zedc_inflateSaveBuffers(zedc_streamp strm, const char *prefix)
return rc;
snprintf(fname, sizeof(fname) - 1, "%s_out_buf.bin", prefix);
- __save_buf_to_file(fname, (void *)(unsigned long)
- __be64_to_cpu(asiv->out_buff),
- __be32_to_cpu(asiv->out_buff_len));
+ rc = __save_buf_to_file(fname, (void *)(unsigned long)
+ __be64_to_cpu(asiv->out_buff),
+ __be32_to_cpu(asiv->out_buff_len));
if (rc != ZEDC_OK)
return rc;
snprintf(fname, sizeof(fname) - 1, "%s_in_dict.bin", prefix);
- __save_buf_to_file(fname, (void *)(unsigned long)
- __be64_to_cpu(asiv->in_dict),
- __be32_to_cpu(asiv->in_dict_len));
+ rc = __save_buf_to_file(fname, (void *)(unsigned long)
+ __be64_to_cpu(asiv->in_dict),
+ __be32_to_cpu(asiv->in_dict_len));
if (rc != ZEDC_OK)
return rc;
snprintf(fname, sizeof(fname) - 1, "%s_out_dict.bin", prefix);
- __save_buf_to_file(fname, (void *)(unsigned long)
- __be64_to_cpu(asiv->out_dict),
- __be32_to_cpu(asiv->out_dict_len));
+ rc = __save_buf_to_file(fname, (void *)(unsigned long)
+ __be64_to_cpu(asiv->out_dict),
+ __be32_to_cpu(asiv->out_dict_len));
if (rc != ZEDC_OK)
return rc;
snprintf(fname, sizeof(fname) - 1, "%s_inp_scratch.bin", prefix);
- __save_buf_to_file(fname, (void *)(unsigned long)
- __be64_to_cpu(asiv->inp_scratch),
- __be32_to_cpu(asiv->in_scratch_len));
+ rc = __save_buf_to_file(fname, (void *)(unsigned long)
+ __be64_to_cpu(asiv->inp_scratch),
+ __be32_to_cpu(asiv->in_scratch_len));
if (rc != ZEDC_OK)
return rc;
diff --git a/lib/libcard.c b/lib/libcard.c
index b511730..d573b34 100644
--- a/lib/libcard.c
+++ b/lib/libcard.c
@@ -1062,10 +1062,10 @@ void genwqe_card_lib_debug(int onoff)
*/
static void ddcb_setup_crc32(struct lib_data_t *d)
{
- int i, j;
+ unsigned int i, j;
uint32_t crc;
- for (i = 0; i < 256; i++) {
+ for (i = 0; i < ARRAY_SIZE(d->crc32_tab); i++) {
crc = i << 24;
for (j = 0; j < 8; j++) {
if (crc & 0x80000000)
@@ -1364,9 +1364,9 @@ int genwqe_pin_memory(card_handle_t dev, const void *addr, size_t size,
if (0 == rc)
return GENWQE_OK;
}
+ pr_err("Dev: %p Fault: %d addr=%p size=%lld dir=%d\n", dev,
+ dev->drv_errno, addr, (long long)size, direction);
}
- pr_err("Dev: %p Fault: %d addr=%p size=%lld dir=%d\n", dev,
- dev->drv_errno, addr, (long long)size, direction);
return GENWQE_ERR_PINNING;
}
@@ -1390,9 +1390,9 @@ int genwqe_unpin_memory(card_handle_t dev, const void *addr, size_t size)
if (0 == rc)
return GENWQE_OK;
}
+ pr_err("Dev: %p Fault: %d addr=%p size=%lld\n", dev,
+ dev->drv_errno, addr, (long long)size);
}
- pr_err("Dev: %p Fault: %d addr=%p size=%lld\n", dev,
- dev->drv_errno, addr, (long long)size);
return GENWQE_ERR_PINNING;
}
@@ -1642,20 +1642,18 @@ static void __hexdump(FILE *fp, const void *buff, unsigned int size)
*/
void genwqe_hexdump(FILE *fp, const void *buff, unsigned int size)
{
- unsigned int i;
+ unsigned int i, j = 0;
const uint8_t *b = (uint8_t *)buff;
char ascii[17];
- char str[2] = { 0x0, };
for (i = 0; i < size; i++) {
if ((i & 0x0f) == 0x00) {
fprintf(fp, " %08x:", i);
- memset(ascii, 0, sizeof(ascii));
+ memset(ascii, '\0', sizeof(ascii));
+ j = 0;
}
fprintf(fp, " %02x", b[i]);
- str[0] = isalnum(b[i]) ? b[i] : '.';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = isalnum(b[i]) ? b[i] : '.';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
@@ -1664,9 +1662,7 @@ void genwqe_hexdump(FILE *fp, const void *buff, unsigned int size)
/* print trailing up to a 16 byte boundary. */
for (; i < ((size + 0xf) & ~0xf); i++) {
fprintf(fp, " ");
- str[0] = ' ';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = ' ';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
@@ -1737,8 +1733,10 @@ int genwqe_flash_read(card_handle_t dev, struct card_upd_params *upd)
rc = __genwqe_flash_read(dev, upd->partition, buf, buflen,
&upd->retc, &upd->attn,
&upd->progress);
- if (rc < 0)
+ if (rc < 0) {
+ close(fd);
goto err_exit;
+ }
rc = (int)write(fd, buf, (size_t)upd->flength);
close(fd);
diff --git a/lib/libddcb.c b/lib/libddcb.c
index 4e94b5e..251e27e 100644
--- a/lib/libddcb.c
+++ b/lib/libddcb.c
@@ -150,10 +150,9 @@ const char *ddcb_strerror(int errnum)
void ddcb_hexdump(FILE *fp, const void *buff, unsigned int size)
{
- unsigned int i;
+ unsigned int i, j = 0;
const uint8_t *b = (uint8_t *)buff;
char ascii[17];
- char str[2] = { 0x0, };
if (fp == NULL)
return;
@@ -161,12 +160,11 @@ void ddcb_hexdump(FILE *fp, const void *buff, unsigned int size)
for (i = 0; i < size; i++) {
if ((i & 0x0f) == 0x00) {
fprintf(fp, " %08x:", i);
- memset(ascii, 0, sizeof(ascii));
+ memset(ascii, '\0', sizeof(ascii));
+ j = 0;
}
fprintf(fp, " %02x", b[i]);
- str[0] = isalnum(b[i]) ? b[i] : '.';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = isalnum(b[i]) ? b[i] : '.';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
@@ -175,9 +173,7 @@ void ddcb_hexdump(FILE *fp, const void *buff, unsigned int size)
/* print trailing up to a 16 byte boundary. */
for (; i < ((size + 0xf) & ~0xf); i++) {
fprintf(fp, " ");
- str[0] = ' ';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = ' ';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
@@ -534,7 +530,7 @@ int ddcb_register_accelerator(struct ddcb_accel_funcs *accel)
if (accel == NULL)
return DDCB_ERR_INVAL;
- if ddcb_gather_statistics() {
+ if (ddcb_gather_statistics()) {
rc = pthread_mutex_init(&accel->slock, NULL);
if (rc != 0)
return DDCB_ERRNO;
diff --git a/lib/wrapper.c b/lib/wrapper.c
index 2e93f71..c16fbf7 100644
--- a/lib/wrapper.c
+++ b/lib/wrapper.c
@@ -626,6 +626,9 @@ int deflateSetDictionary(z_streamp strm,
strm->state = w->priv_data;
rc = w->impl ? h_deflateSetDictionary(strm, dictionary, dictLength) :
z_deflateSetDictionary(strm, dictionary, dictLength);
+
+ pr_trace("[%p] calculated adler32=%08x\n", strm,
+ (unsigned int)strm->adler);
strm->state = (void *)w;
return rc;
@@ -845,9 +848,10 @@ int deflateEnd(z_streamp strm)
}
rc = __deflateEnd(strm, w);
- free(w);
pr_trace("[%p] deflateEnd w=%p rc=%d\n", strm, w, rc);
+ free(w);
+
return rc;
}
@@ -1302,9 +1306,10 @@ int inflateEnd(z_streamp strm)
free(w->dictionary);
w->dictionary = NULL;
}
- free(w);
pr_trace("[%p] inflateEnd w=%p rc=%d\n", strm, w, rc);
+ free(w);
+
return rc;
}
diff --git a/licenses/cla-corporate.txt b/licenses/cla-corporate.txt
deleted file mode 100644
index d137017..0000000
--- a/licenses/cla-corporate.txt
+++ /dev/null
@@ -1,157 +0,0 @@
- International Business machines, Inc.
- Software Grant and Corporate Contributor License Agreement ("Agreement")
- http://www.github.org/ibm-genwqe/licenses/
-
-
-Thank you for your interest in IBM’s ibm-genwqe project (“Hardware
-acceleration of deflate/zlib compression with IBM FPGA
-accelerators"). In order to clarify the intellectual property license
-granted with Contributions from any person or entity, IBM must have a
-Contributor License Agreement (CLA) on file that has been signed by
-each Contributor, indicating agreement to the license terms
-below. This license is for your protection as a Contributor as well as
-the protection of IBM and its users; it does not change your rights to
-use your own Contributions for any other purpose.
-
-This version of the Agreement allows an entity (the "Corporation") to
-submit Contributions to the Project, to authorize Contributions
-submitted by its designated employees to the Project, and to grant
-copyright and patent licenses thereto.
-
-If you have not already done so, please complete and sign, then scan
-and email a pdf file of this Agreement to <haverkam@de.ibm.com>. If
-necessary, send an original signed Agreement to:
-
-IBM Deutschland RD GmbH
-SCHOENAICHER STR. 220, BOEBLINGEN 71032
-Germany
-Attn: Frank Haverkamp
-
-
- Please read this document carefully before signing and keep a copy
- for your records.
-
-Corporation name: ________________________________________________
-
-Corporation address: ________________________________________________
-
- ________________________________________________
-
-Point of Contact: ________________________________________________
-
-E-Mail: ________________________________________________
-
-Telephone: _____________________
-
-
-You accept and agree to the following terms and conditions for Your
-present and future Contributions submitted to the Project. Except for
-the license granted herein to IBM and recipients of software
-distributed by IBM, You reserve all right, title, and interest in and
-to Your Contributions.
-
-1. Definitions.
-
- "You" (or "Your") shall mean the copyright owner or legal entity
- authorized by the copyright owner that is making this Agreement
- with IBM. For legal entities, the entity making a Contribution and
- all other entities that control, are controlled by, or are under
- common control with that entity are considered to be a single
- Contributor. For the purposes of this definition, "control" means
- (i) the power, direct or indirect, to cause the direction or
- management of such entity, whether by contract or otherwise, or
- (ii) ownership of fifty percent (50%) or more of the outstanding
- shares, or (iii) beneficial ownership of such entity.
-
- "Contribution" shall mean the code, documentation or other original
- works of authorship expressly identified in Schedule B, as well as
- any original work of authorship, including any modifications or
- additions to an existing work, that is intentionally submitted by
- You to IBM for inclusion in, or documentation of, the Project
- managed by IBM (the "Work"). For the purposes of this definition,
- "submitted" means any form of electronic, verbal, or written
- communication sent to IBM or its representatives, including but not
- limited to communication on electronic mailing lists, source code
- control systems, and issue tracking systems that are managed by, or
- on behalf of, IBM for the purpose of discussing and improving the
- Work, but excluding communication that is conspicuously marked or
- otherwise designated in writing by You as "Not a Contribution."
-
-2. Grant of Copyright License. Subject to the terms and conditions
- of this Agreement, You hereby grant to IBM and to
- recipients of software distributed by IBM a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare derivative works of,
- publicly display, publicly perform, sublicense, and distribute
- Your Contributions and such derivative works.
-
-3. Grant of Patent License. Subject to the terms and conditions of
- this Agreement, You hereby grant to IBM and to recipients
- of software distributed by IBM a perpetual, worldwide,
- non-exclusive, no-charge, royalty-free, irrevocable (except as
- stated in this section) patent license to make, have made, use,
- offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by You that are necessarily infringed by Your Contribution(s)
- alone or by combination of Your Contribution(s) with the Work to
- which such Contribution(s) were submitted. If any entity institutes
- patent litigation against You or any other entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that your
- Contribution, or the Work to which you have contributed, constitutes
- direct or contributory patent infringement, then any patent licenses
- granted to that entity under this Agreement for that Contribution or
- Work shall terminate as of the date such litigation is filed.
-
-4. You represent that You are legally entitled to grant the above
- license. You represent further that each employee of the
- Corporation designated on Schedule A below (or in a subsequent
- written modification to that Schedule) is authorized to submit
- Contributions on behalf of the Corporation.
-
-5. You represent that each of Your Contributions is Your original
- creation (see section 7 for submissions on behalf of others).
-
-6. You are not expected to provide support for Your Contributions,
- except to the extent You desire to provide support. You may provide
- support for free, for a fee, or not at all. Unless required by
- applicable law or agreed to in writing, You provide Your
- Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- OF ANY KIND, either express or implied, including, without
- limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
- MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
-
-7. Should You wish to submit work that is not Your original creation,
- You may submit it to IBM separately from any
- Contribution, identifying the complete details of its source and
- of any license or other restriction (including, but not limited
- to, related patents, trademarks, and license agreements) of which
- you are personally aware, and conspicuously marking the work as
- "Submitted on behalf of a third-party: [named here]".
-
-8. It is your responsibility to notify IBM when any change
- is required to the list of designated employees authorized to submit
- Contributions on behalf of the Corporation, or to the Corporation's
- Point of Contact with IBM.
-
-
-
-Please sign: __________________________________ Date: _______________
-
-Title: __________________________________
-
-Corporation: __________________________________
-
-
-Schedule A
-
- [Initial list of designated employees. NB: authorization is not
- tied to particular Contributions.]
-
-
-
-
-Schedule B
-
- [Identification of optional concurrent software grant. Would be
- left blank or omitted if there is no concurrent software grant.]
-
diff --git a/licenses/cla-individual.txt b/licenses/cla-individual.txt
deleted file mode 100644
index 56aad29..0000000
--- a/licenses/cla-individual.txt
+++ /dev/null
@@ -1,140 +0,0 @@
- International Business Machines, Inc. (IBM)
- Individual Contributor License Agreement ("Agreement")
- http://www.github.org/ibm-genwqe/licenses/
-
-Thank you for your interest in the ibm-genwqe project ("Hardware
-acceleration of deflate/zlib compression with IBM FPGA accelerators").
-
-In order to clarify the intellectual property license granted with
-Contributions from any person or entity, IBM must have a Contributor
-License Agreement ("CLA") on file that has been signed by each
-Contributor, indicating agreement to the license terms below. This
-license is for your protection as a Contributor as well as the
-protection of IBM and its customers; it does not change your rights to
-use your own Contributions for any other purpose. If you have not
-already done so, please complete and sign, then scan and email a pdf
-file of this Agreement to <haverkam@de.ibm.com>.
-
-The original signed agreement should be sent to:
-
-IBM Deutschland RD GmbH
-SCHOENAICHER STR. 220, BOEBLINGEN 71032
-Germany
-Attn: Frank Haverkamp
-
-Please read this document carefully before signing and keep a copy for
-your records.
-
- Full name: ______________________________________________________
-
- (optional) Public name: _________________________________________
-
- Mailing Address: ________________________________________________
-
- ________________________________________________
-
- Country: ______________________________________________________
-
- Telephone: ______________________________________________________
-
- E-Mail: ______________________________________________________
-
-
-You accept and agree to the following terms and conditions for Your
-present and future Contributions submitted to the Project. Except for
-the license granted herein to IBM and recipients of software
-distributed by IBM, You reserve all right, title, and interest in and
-to Your Contributions.
-
-1. Definitions.
-
- "You" (or "Your") shall mean the copyright owner or legal entity
- authorized by the copyright owner that is making this Agreement
- with IBM. For legal entities, the entity making a Contribution and
- all other entities that control, are controlled by, or are under
- common control with that entity are considered to be a single
- Contributor. For the purposes of this definition, "control" means
- (i) the power, direct or indirect, to cause the direction or
- management of such entity, whether by contract or otherwise, or
- (ii) ownership of fifty percent (50%) or more of the outstanding
- shares, or (iii) beneficial ownership of such entity.
-
- "Contribution" shall mean any original work of authorship,
- including any modifications or additions to an existing work, that
- is intentionally submitted by You to the Project for inclusion in,
- or documentation of, the Project (”the Work”). For the purposes of
- this definition, "submitted" means any form of electronic, verbal,
- or written communication sent to the Project or its
- representatives,including but not limited to communication on
- electronic mailing lists, source code control systems, and issue
- tracking systems that are managed by, or on behalf of, the Project
- for the purpose of discussing and improving the Work, but excluding
- communication that is conspicuously marked or otherwise designated
- in writing by You as "Not a Contribution."
-
-2. Grant of Copyright License. Subject to the terms and conditions of
- this Agreement, You hereby grant to IBM and to recipients of software
- distributed by IBM a perpetual, worldwide, non-exclusive, no-charge,
- royalty-free, irrevocable copyright license to reproduce, prepare
- derivative works of, publicly display, publicly perform, sublicense,
- and distribute Your Contributions and such derivative works.
-
-3. Grant of Patent License. Subject to the terms and conditions of
- this Agreement, You hereby grant to IBM and to recipients of software
- distributed by IBM a perpetual, worldwide, non-exclusive, no-charge,
- royalty-free, irrevocable (except as stated in this section) patent
- license to make, have made, use, offer to sell, sell, import, and
- otherwise transfer the Work to which Your Contribution(s) were
- submitted, where such license applies only to those patent claims
- licensable by You that are necessarily infringed by Your
- Contribution(s) alone or by combination of Your Contribution(s) with
- the Work to which such Contribution(s) was submitted. If any entity
- institutes patent litigation against You or any other entity
- (including a cross-claim or counterclaim in a lawsuit) alleging that
- your Contribution, or the Work to which you have contributed,
- constitutes direct or contributory patent infringement, then any
- patent licenses granted to that entity under this Agreement for that
- Contribution or Work shall terminate as of the date such litigation is
- filed.
-
-4. You represent that you are legally entitled to grant the above
- license. If your employer(s) has rights to intellectual property
- that you create that includes your Contributions, you represent
- that you have received permission to make Contributions on behalf
- of that employer, that your employer has waived such rights for
- your Contributions to the Project, or that your employer has
- executed a separate Corporate CLA with IBM.
-
-5. You represent that each of Your Contributions is Your original
- creation (see section 7 for submissions on behalf of others). You
- represent that Your Contribution submissions include complete
- details of any third-party license or other restriction (including,
- but not limited to, related patents and trademarks) of which you
- are personally aware and which are associated with any part of Your
- Contributions.
-
-6. You are not expected to provide support for Your Contributions,
- except to the extent You desire to provide support. You may provide
- support for free, for a fee, or not at all. Unless required by
- applicable law or agreed to in writing, You provide Your
- Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- OF ANY KIND, either express or implied, including, without
- limitation, any warranties or conditions of TITLE, NON-
- INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
-
-7. Should You wish to submit work that is not Your original creation,
- You may submit it to the Project separately from any
- Contribution, identifying the complete details of its source and of
- any license or other restriction (including, but not limited to,
- related patents, trademarks, and license agreements) of which you
- are personally aware, and conspicuously marking the work as
- "Submitted on behalf of a third-party: [named here]".
-
-8. You agree to notify IBM of any facts or circumstances of
- which you become aware that would make these representations
- inaccurate in any respect.
-
-
-
-Please sign: __________________________________ Date: ________________
-
diff --git a/misc/zlib_test.sh b/misc/zlib_test.sh
index ec031f7..ddc6271 100755
--- a/misc/zlib_test.sh
+++ b/misc/zlib_test.sh
@@ -397,7 +397,7 @@ function zlib_append ()
local params=$2
# Use default settings ...
- # Set size large enough that hardware inflate is realy used
+ # Set size large enough that hardware inflate is really used
#
# hhh [0x3ffff1c655d8] loops=0 flush=1 Z_PARTIAL_FLUSH
# hhh [0x3ffff1c655d8] *** giving out 100 bytes ...
diff --git a/misc/zpipe_append.c b/misc/zpipe_append.c
index 7cb2e2d..7f75a7b 100644
--- a/misc/zpipe_append.c
+++ b/misc/zpipe_append.c
@@ -100,7 +100,7 @@ static int def(FILE *source, FILE *dest, int window_bits, int _flush,
return Z_ERRNO;
out = malloc(CHUNK_o);
- if (in == NULL) {
+ if (out == NULL) {
free(in);
return Z_ERRNO;
}
@@ -113,8 +113,11 @@ static int def(FILE *source, FILE *dest, int window_bits, int _flush,
ret = deflateInit2(&strm, level, Z_DEFLATED, window_bits, 8,
Z_DEFAULT_STRATEGY);
- if (ret != Z_OK)
+ if (ret != Z_OK) {
+ free(in);
+ free(out);
return ret;
+ }
/* compress until end of file */
do {
@@ -210,7 +213,7 @@ static int inf(FILE *source, FILE *dest, int window_bits, int _flush,
return Z_ERRNO;
out = malloc(CHUNK_o);
- if (in == NULL) {
+ if (out == NULL) {
free(in);
return Z_ERRNO;
}
@@ -503,6 +506,8 @@ int main(int argc, char **argv)
rc = def(i_fp, o_fp, window_bits, flush, Z_DEFAULT_COMPRESSION,
&expected_bytes, &decompressed_bytes);
if (rc != Z_OK) {
+ fclose(o_fp);
+ fclose(i_fp);
fprintf(stderr, "err: compression failed.\n");
zerr(rc);
return rc;
@@ -566,6 +571,8 @@ int main(int argc, char **argv)
}
if (rc != Z_OK) {
+ fclose(o_fp);
+ fclose(n_fp);
fprintf(stderr, "err: decompression failed.\n");
zerr(rc);
return rc;
diff --git a/misc/zpipe_mt.c b/misc/zpipe_mt.c
index 03c57a1..27344f6 100644
--- a/misc/zpipe_mt.c
+++ b/misc/zpipe_mt.c
@@ -42,7 +42,7 @@
# define SET_BINARY_MODE(file)
#endif
-/* FIXME Fake this for old RHEL verions e.g. RHEL5.6 */
+/* FIXME Fake this for old RHEL versions e.g. RHEL5.6 */
#ifndef CPU_ALLOC
#define CPU_ALLOC(cpus) ({ void *ptr = NULL; ptr; })
#define CPU_ALLOC_SIZE(cpus) ({ int val = 0; val; })
@@ -54,7 +54,7 @@
#define sched_setaffinity(x, size, cpusetp) ({ int val = 0; val; })
#endif
-/* FIXME Fake this for old RHEL verions e.g. RHEL5.6 */
+/* FIXME Fake this for old RHEL versions e.g. RHEL5.6 */
#ifndef CLOCK_MONOTONIC_RAW
#define clock_gettime(clk_id, tp) ({ int val = 0; val; })
#endif
diff --git a/misc/zpipe_rnd.c b/misc/zpipe_rnd.c
index 042cbc1..ee8e3eb 100644
--- a/misc/zpipe_rnd.c
+++ b/misc/zpipe_rnd.c
@@ -48,8 +48,8 @@ static unsigned int CHUNK_o = 4 * 1024 * 1024; /* 16384; */
level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
version of the library linked do not match, or Z_ERRNO if there is
an error reading or writing the files. */
-static int def(FILE *source, FILE *dest, int level, int windowBits,
- uint8_t *dictionary, int dictLength)
+static int def(FILE *source, FILE *dest, int level, int strategy,
+ int windowBits, uint8_t *dictionary, int dictLength)
{
int ret, flush;
unsigned have;
@@ -64,22 +64,30 @@ static int def(FILE *source, FILE *dest, int level, int windowBits,
return Z_ERRNO;
out = malloc(CHUNK_o);
- if (out == NULL)
+ if (out == NULL) {
+ free(in);
return Z_ERRNO;
+ }
/* allocate deflate state */
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
ret = deflateInit2(&strm, level, Z_DEFLATED, windowBits, 8,
- Z_DEFAULT_STRATEGY);
- if (ret != Z_OK)
+ strategy);
+ if (ret != Z_OK) {
+ free(in);
+ free(out);
return ret;
+ }
if (dictLength > 0) {
ret = deflateSetDictionary(&strm, dictionary, dictLength);
- if (ret != Z_OK)
+ if (ret != Z_OK) {
+ free(in);
+ free(out);
return ret;
+ }
}
/* compress until end of file */
@@ -152,8 +160,10 @@ static int inf(FILE *source, FILE *dest, int windowBits,
return Z_ERRNO;
out = malloc(CHUNK_o);
- if (out == NULL)
+ if (out == NULL) {
+ free(in);
return Z_ERRNO;
+ }
/* allocate inflate state */
strm.zalloc = Z_NULL;
@@ -163,14 +173,20 @@ static int inf(FILE *source, FILE *dest, int windowBits,
strm.next_in = Z_NULL;
ret = inflateInit2(&strm, windowBits);
- if (ret != Z_OK)
+ if (ret != Z_OK) {
+ free(in);
+ free(out);
return ret;
+ }
if (!((windowBits >= 8) && (windowBits <= 15)) && /* !ZLIB */
(dictLength > 0)) {
ret = inflateSetDictionary(&strm, dictionary, dictLength);
- if (ret != Z_OK)
+ if (ret != Z_OK) {
+ free(in);
+ free(out);
return ret;
+ }
}
/* decompress until deflate stream ends or end of file */
@@ -306,6 +322,8 @@ static void usage(char *prog)
fprintf(stderr, "%s usage: %s [-d, --decompress]\n"
" [-F, --format <ZLIB|DEFLATE|GZIP>]\n"
+ " [-S, --strategy <0..4>] 0: DEFAULT,\n"
+ " 1: FILTERED, 2: HUFFMAN_ONLY, 3: RLE, 4: FIXED\n"
" [-r, --rnd\n"
" [-s, --seed <seed>\n"
" [-1, --fast]\n"
@@ -369,6 +387,7 @@ int main(int argc, char **argv)
int dictLength = 0;
int windowBits;
int level = Z_DEFAULT_COMPRESSION;
+ int strategy = Z_DEFAULT_STRATEGY;
/* avoid end-of-line conversions */
SET_BINARY_MODE(stdin);
@@ -379,6 +398,7 @@ int main(int argc, char **argv)
int option_index = 0;
static struct option long_options[] = {
{ "decompress", no_argument, NULL, 'd' },
+ { "strategy", required_argument, NULL, 'S' },
{ "format", required_argument, NULL, 'F' },
{ "fast", no_argument, NULL, '1' },
{ "default", no_argument, NULL, '6' },
@@ -393,7 +413,7 @@ int main(int argc, char **argv)
{ 0, no_argument, NULL, 0 },
};
- ch = getopt_long(argc, argv, "169D:F:rs:i:o:dvh?",
+ ch = getopt_long(argc, argv, "169D:F:rs:i:o:S:dvh?",
long_options, &option_index);
if (ch == -1) /* all params processed ? */
break;
@@ -427,6 +447,9 @@ int main(int argc, char **argv)
case 's':
seed = str_to_num(optarg);
break;
+ case 'S':
+ strategy = str_to_num(optarg);
+ break;
case 'i':
CHUNK_i = str_to_num(optarg);
break;
@@ -447,7 +470,8 @@ int main(int argc, char **argv)
/* do compression if no arguments */
if (compress == 1) {
- ret = def(stdin, stdout, level, windowBits, dictionary, dictLength);
+ ret = def(stdin, stdout, level, strategy,
+ windowBits, dictionary, dictLength);
if (ret != Z_OK)
zerr(ret);
return ret;
diff --git a/tools/Makefile b/tools/Makefile
index 4d14b10..cefdcdd 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -62,7 +62,9 @@ $(projs): $(libs)
objs = force_cpu.o genwqe_vpd_common.o $(projs:=.o)
-manpages = $(projs:=.1.gz)
+test_scripts = genwqe_mt_perf genwqe_test_gz
+
+manpages = $(projs:=.1.gz) $(test_scripts:=.1.gz)
manpages: all $(manpages)
@@ -83,6 +85,7 @@ genwqe_gunzip.o: genwqe_gzip.c
### Setting LD_LIBRARY_PATH helps to try tools with dynamic linkage
%.1: %
LD_LIBRARY_PATH=../lib $(HELP2MAN) -N --output=$@ \
+ --help-option='-h' --version-option='-V' \
--name "IBM Hardware Accelerator Tool." ./$<
%.1.gz: %.1
diff --git a/tools/force_cpu.c b/tools/force_cpu.c
index eb1634b..0f8cb4c 100644
--- a/tools/force_cpu.c
+++ b/tools/force_cpu.c
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2017 International Business Machines
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#include <stdio.h>
#include <stdlib.h>
diff --git a/tools/genwqe_echo.c b/tools/genwqe_echo.c
index 449564d..8386a9e 100644
--- a/tools/genwqe_echo.c
+++ b/tools/genwqe_echo.c
@@ -75,7 +75,6 @@ static void usage(const char *prog)
" -i, --interval=INTERVAL_USEC\n"
" -s, --string=TESTSTRING\n"
" -p, --polling use DDCB polling mode.\n"
- " -q, --quiet only summary output\n"
"\n"
"This utility sends echo DDCBs either to the service layer\n"
"or other chip units. It can be used to check the cards\n"
diff --git a/tools/genwqe_find_card b/tools/genwqe_find_card
index ca60040..aedb07a 100755
--- a/tools/genwqe_find_card
+++ b/tools/genwqe_find_card
@@ -25,6 +25,14 @@
export accel=UNKNOWN
+# Print usage message helper function
+function usage() {
+ echo "Usage of $PROGRAM:"
+ echo " [-A] <accelerator> use either GENWQE for the PCIe "
+ echo " and CAPI for CAPI based solution available "
+ echo " only on System p"
+}
+
# Parse any options given on the command line
while getopts "A:C:t:PvVhl" opt; do
case ${opt} in
@@ -46,14 +54,6 @@ while getopts "A:C:t:PvVhl" opt; do
esac
done
-# Print usage message helper function
-function usage() {
- echo "Usage of $PROGRAM:"
- echo " [-A] <accelerator> use either GENWQE for the PCIe "
- echo " and CAPI for CAPI based solution available "
- echo " only on System p"
-}
-
#
# We need to take into account that there might be other CAPI cards
# in our system. Therefore we check the psl_revision, which identifies
diff --git a/tools/genwqe_gzip.c b/tools/genwqe_gzip.c
index d2990d3..9df40ef 100644
--- a/tools/genwqe_gzip.c
+++ b/tools/genwqe_gzip.c
@@ -368,10 +368,9 @@ static void usage(FILE *fp, char *prog, int argc, char *argv[])
static inline void hexdump(FILE *fp, const void *buff, unsigned int size)
{
- unsigned int i;
+ unsigned int i, j = 0;
const uint8_t *b = (uint8_t *)buff;
char ascii[17];
- char str[2] = { 0x0, };
if (size == 0)
return;
@@ -379,12 +378,11 @@ static inline void hexdump(FILE *fp, const void *buff, unsigned int size)
for (i = 0; i < size; i++) {
if ((i & 0x0f) == 0x00) {
fprintf(fp, " %08x:", i);
- memset(ascii, 0, sizeof(ascii));
+ memset(ascii, '\0', sizeof(ascii));
+ j = 0;
}
fprintf(fp, " %02x", b[i]);
- str[0] = isalnum(b[i]) ? b[i] : '.';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = isalnum(b[i]) ? b[i] : '.';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
@@ -393,9 +391,7 @@ static inline void hexdump(FILE *fp, const void *buff, unsigned int size)
/* print trailing up to a 16 byte boundary. */
for (; i < ((size + 0xf) & ~0xf); i++) {
fprintf(fp, " ");
- str[0] = ' ';
- str[1] = '\0';
- strncat(ascii, str, sizeof(ascii) - 1);
+ ascii[j++] = ' ';
if ((i & 0x0f) == 0x0f)
fprintf(fp, " | %s\n", ascii);
diff --git a/tools/genwqe_memcopy.c b/tools/genwqe_memcopy.c
index 1222cdd..7d25391 100644
--- a/tools/genwqe_memcopy.c
+++ b/tools/genwqe_memcopy.c
@@ -746,7 +746,7 @@ int main(int argc, char *argv[])
break;
}
ip.card_type = strtol(optarg, (char **)NULL, 0);
- if ((DDCB_TYPE_GENWQE != ip.card_type) ||
+ if ((DDCB_TYPE_GENWQE != ip.card_type) &&
(DDCB_TYPE_CAPI != ip.card_type)) {
usage(argv[0]);
exit(EXIT_FAILURE);
diff --git a/tools/genwqe_vpd_common.c b/tools/genwqe_vpd_common.c
index d6d27d0..4c98906 100644
--- a/tools/genwqe_vpd_common.c
+++ b/tools/genwqe_vpd_common.c
@@ -49,10 +49,10 @@ static char crc_token[]={"CS"};
void genwqe_crc32_setup_lut(void)
{
- int i, j;
+ unsigned int i, j;
uint32_t crc;
- for (i = 0; i < 256; i++) {
+ for (i = 0; i < ARRAY_SIZE(genwqe_crc32_lut); i++) {
crc = i << 24;
for ( j = 0; j < 8; j++ ) {
if (crc & 0x80000000)
diff --git a/tools/gzFile_test.c b/tools/gzFile_test.c
index 348d3fc..19b56cb 100644
--- a/tools/gzFile_test.c
+++ b/tools/gzFile_test.c
@@ -557,6 +557,11 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE);
}
+ if ((i_fname == NULL) || (o_fname == NULL)) {
+ pr_err("No input or output file name provided.");
+ return -1;
+ }
+
fprintf(stderr, "%sCompress %s to %s in %ld bytes, "
"out %ld bytes chunks with level %d (size=%lld, offs=%lld)\n",
use_compress ? "" : "De",
diff --git a/tools/zlib_mt_perf.c b/tools/zlib_mt_perf.c
index e90e824..dff5a0f 100644
--- a/tools/zlib_mt_perf.c
+++ b/tools/zlib_mt_perf.c
@@ -218,8 +218,10 @@ static int defl(struct thread_data *d, FILE *source, int level)
return Z_ERRNO;
out = __malloc(CHUNK_o);
- if (out == NULL)
+ if (out == NULL) {
+ __free(in);
return Z_ERRNO;
+ }
/* allocate deflate state */
strm.zalloc = Z_NULL;
@@ -319,8 +321,10 @@ static int infl(struct thread_data *d, FILE *source)
return Z_ERRNO;
out = __malloc(CHUNK_o);
- if (out == NULL)
+ if (out == NULL) {
+ __free(in);
return Z_ERRNO;
+ }
/* allocate inflate state */
strm.zalloc = Z_NULL;