Commit 9290777f authored by David S. Miller's avatar David S. Miller

Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5

into kernel.bkbits.net:/home/davem/net-2.5
parents c98a2447 de148876
This diff is collapsed.
...@@ -28,10 +28,10 @@ static void update(struct crypto_tfm *tfm, ...@@ -28,10 +28,10 @@ static void update(struct crypto_tfm *tfm,
unsigned int i; unsigned int i;
for (i = 0; i < nsg; i++) { for (i = 0; i < nsg; i++) {
char *p = crypto_kmap(sg[i].page) + sg[i].offset; char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset;
tfm->__crt_alg->cra_digest.dia_update(tfm->crt_ctx, tfm->__crt_alg->cra_digest.dia_update(tfm->crt_ctx,
p, sg[i].length); p, sg[i].length);
crypto_kunmap(p); crypto_kunmap(p, 0);
crypto_yield(tfm); crypto_yield(tfm);
} }
} }
...@@ -49,10 +49,10 @@ static void digest(struct crypto_tfm *tfm, ...@@ -49,10 +49,10 @@ static void digest(struct crypto_tfm *tfm,
tfm->crt_digest.dit_init(tfm); tfm->crt_digest.dit_init(tfm);
for (i = 0; i < nsg; i++) { for (i = 0; i < nsg; i++) {
char *p = crypto_kmap(sg[i].page) + sg[i].offset; char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset;
tfm->__crt_alg->cra_digest.dia_update(tfm->crt_ctx, tfm->__crt_alg->cra_digest.dia_update(tfm->crt_ctx,
p, sg[i].length); p, sg[i].length);
crypto_kunmap(p); crypto_kunmap(p, 0);
crypto_yield(tfm); crypto_yield(tfm);
} }
crypto_digest_final(tfm, out); crypto_digest_final(tfm, out);
......
...@@ -16,17 +16,29 @@ ...@@ -16,17 +16,29 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/hardirq.h> #include <asm/hardirq.h>
#include <asm/softirq.h> #include <asm/softirq.h>
#include <asm/kmap_types.h>
static inline void *crypto_kmap(struct page *page) static enum km_type km_types[] = {
KM_USER0,
KM_USER1,
KM_SOFTIRQ0,
KM_SOFTIRQ1,
};
static inline enum km_type crypto_kmap_type(int out)
{
return km_types[(in_softirq() ? 2 : 0) + out];
}
static inline void *crypto_kmap(struct page *page, int out)
{ {
return kmap_atomic(page, in_softirq() ? return kmap_atomic(page, crypto_kmap_type(out));
KM_CRYPTO_SOFTIRQ : KM_CRYPTO_USER);
} }
static inline void crypto_kunmap(void *vaddr) static inline void crypto_kunmap(void *vaddr, int out)
{ {
kunmap_atomic(vaddr, in_softirq() ? kunmap_atomic(vaddr, crypto_kmap_type(out));
KM_CRYPTO_SOFTIRQ : KM_CRYPTO_USER);
} }
static inline void crypto_yield(struct crypto_tfm *tfm) static inline void crypto_yield(struct crypto_tfm *tfm)
......
...@@ -703,7 +703,7 @@ test_des(void) ...@@ -703,7 +703,7 @@ test_des(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = len; sg[0].length = len;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, len);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -746,7 +746,7 @@ test_des(void) ...@@ -746,7 +746,7 @@ test_des(void)
sg[1].offset = ((long) p & ~PAGE_MASK); sg[1].offset = ((long) p & ~PAGE_MASK);
sg[1].length = 8; sg[1].length = 8;
ret = crypto_cipher_encrypt(tfm, sg, 2); ret = crypto_cipher_encrypt(tfm, sg, sg, 16);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -814,7 +814,7 @@ test_des(void) ...@@ -814,7 +814,7 @@ test_des(void)
sg[2].offset = ((long) p & ~PAGE_MASK); sg[2].offset = ((long) p & ~PAGE_MASK);
sg[2].length = 8; sg[2].length = 8;
ret = crypto_cipher_encrypt(tfm, sg, 3); ret = crypto_cipher_encrypt(tfm, sg, sg, 32);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
...@@ -890,7 +890,7 @@ test_des(void) ...@@ -890,7 +890,7 @@ test_des(void)
sg[3].offset = ((long) p & ~PAGE_MASK); sg[3].offset = ((long) p & ~PAGE_MASK);
sg[3].length = 18; sg[3].length = 18;
ret = crypto_cipher_encrypt(tfm, sg, 4); ret = crypto_cipher_encrypt(tfm, sg, sg, 24);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
...@@ -979,7 +979,7 @@ test_des(void) ...@@ -979,7 +979,7 @@ test_des(void)
sg[4].offset = ((long) p & ~PAGE_MASK); sg[4].offset = ((long) p & ~PAGE_MASK);
sg[4].length = 8; sg[4].length = 8;
ret = crypto_cipher_encrypt(tfm, sg, 5); ret = crypto_cipher_encrypt(tfm, sg, sg, 16);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
...@@ -1078,7 +1078,7 @@ test_des(void) ...@@ -1078,7 +1078,7 @@ test_des(void)
sg[7].offset = ((long) p & ~PAGE_MASK); sg[7].offset = ((long) p & ~PAGE_MASK);
sg[7].length = 1; sg[7].length = 1;
ret = crypto_cipher_encrypt(tfm, sg, 8); ret = crypto_cipher_encrypt(tfm, sg, sg, 8);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1120,7 +1120,7 @@ test_des(void) ...@@ -1120,7 +1120,7 @@ test_des(void)
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = len; sg[0].length = len;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("des_decrypt() failed flags=%x\n", printk("des_decrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1163,7 +1163,7 @@ test_des(void) ...@@ -1163,7 +1163,7 @@ test_des(void)
sg[1].offset = ((long) p & ~PAGE_MASK); sg[1].offset = ((long) p & ~PAGE_MASK);
sg[1].length = 8; sg[1].length = 8;
ret = crypto_cipher_decrypt(tfm, sg, 2); ret = crypto_cipher_decrypt(tfm, sg, sg, 16);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1220,7 +1220,7 @@ test_des(void) ...@@ -1220,7 +1220,7 @@ test_des(void)
sg[2].offset = ((long) p & ~PAGE_MASK); sg[2].offset = ((long) p & ~PAGE_MASK);
sg[2].length = 1; sg[2].length = 1;
ret = crypto_cipher_decrypt(tfm, sg, 3); ret = crypto_cipher_decrypt(tfm, sg, sg, 16);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
...@@ -1290,7 +1290,7 @@ test_des(void) ...@@ -1290,7 +1290,7 @@ test_des(void)
crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_cipher_set_iv(tfm, des_tv[i].iv,
crypto_tfm_alg_ivsize(tfm)); crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, len);
if (ret) { if (ret) {
printk("des_cbc_encrypt() failed flags=%x\n", printk("des_cbc_encrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1349,7 +1349,7 @@ test_des(void) ...@@ -1349,7 +1349,7 @@ test_des(void)
crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm)); crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_encrypt(tfm, sg, 2); ret = crypto_cipher_encrypt(tfm, sg, sg, 24);
if (ret) { if (ret) {
printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags); printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1398,7 +1398,7 @@ test_des(void) ...@@ -1398,7 +1398,7 @@ test_des(void)
crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_cipher_set_iv(tfm, des_tv[i].iv,
crypto_tfm_alg_blocksize(tfm)); crypto_tfm_alg_blocksize(tfm));
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, len);
if (ret) { if (ret) {
printk("des_cbc_decrypt() failed flags=%x\n", printk("des_cbc_decrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1450,7 +1450,7 @@ test_des(void) ...@@ -1450,7 +1450,7 @@ test_des(void)
crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm)); crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_decrypt(tfm, sg, 2); ret = crypto_cipher_decrypt(tfm, sg, sg, 8);
if (ret) { if (ret) {
printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags); printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1518,7 +1518,7 @@ test_des3_ede(void) ...@@ -1518,7 +1518,7 @@ test_des3_ede(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = len; sg[0].length = len;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, len);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1561,7 +1561,7 @@ test_des3_ede(void) ...@@ -1561,7 +1561,7 @@ test_des3_ede(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = len; sg[0].length = len;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, len);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1624,7 +1624,7 @@ test_blowfish(void) ...@@ -1624,7 +1624,7 @@ test_blowfish(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = bf_tv[i].plen; sg[0].length = bf_tv[i].plen;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1666,7 +1666,7 @@ test_blowfish(void) ...@@ -1666,7 +1666,7 @@ test_blowfish(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = bf_tv[i].plen; sg[0].length = bf_tv[i].plen;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1719,7 +1719,7 @@ test_blowfish(void) ...@@ -1719,7 +1719,7 @@ test_blowfish(void)
crypto_cipher_set_iv(tfm, bf_tv[i].iv, crypto_cipher_set_iv(tfm, bf_tv[i].iv,
crypto_tfm_alg_ivsize(tfm)); crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("blowfish_cbc_encrypt() failed flags=%x\n", printk("blowfish_cbc_encrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1764,7 +1764,7 @@ test_blowfish(void) ...@@ -1764,7 +1764,7 @@ test_blowfish(void)
crypto_cipher_set_iv(tfm, bf_tv[i].iv, crypto_cipher_set_iv(tfm, bf_tv[i].iv,
crypto_tfm_alg_ivsize(tfm)); crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("blowfish_cbc_decrypt() failed flags=%x\n", printk("blowfish_cbc_decrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1829,7 +1829,7 @@ test_twofish(void) ...@@ -1829,7 +1829,7 @@ test_twofish(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = tf_tv[i].plen; sg[0].length = tf_tv[i].plen;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1871,7 +1871,7 @@ test_twofish(void) ...@@ -1871,7 +1871,7 @@ test_twofish(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = tf_tv[i].plen; sg[0].length = tf_tv[i].plen;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -1924,7 +1924,7 @@ test_twofish(void) ...@@ -1924,7 +1924,7 @@ test_twofish(void)
crypto_cipher_set_iv(tfm, tf_tv[i].iv, crypto_cipher_set_iv(tfm, tf_tv[i].iv,
crypto_tfm_alg_ivsize(tfm)); crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("blowfish_cbc_encrypt() failed flags=%x\n", printk("blowfish_cbc_encrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -1970,7 +1970,7 @@ test_twofish(void) ...@@ -1970,7 +1970,7 @@ test_twofish(void)
crypto_cipher_set_iv(tfm, tf_tv[i].iv, crypto_cipher_set_iv(tfm, tf_tv[i].iv,
crypto_tfm_alg_ivsize(tfm)); crypto_tfm_alg_ivsize(tfm));
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("blowfish_cbc_decrypt() failed flags=%x\n", printk("blowfish_cbc_decrypt() failed flags=%x\n",
tfm->crt_flags); tfm->crt_flags);
...@@ -2030,7 +2030,7 @@ test_serpent(void) ...@@ -2030,7 +2030,7 @@ test_serpent(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = sizeof(serp_tv[i].plaintext); sg[0].length = sizeof(serp_tv[i].plaintext);
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -2070,7 +2070,7 @@ test_serpent(void) ...@@ -2070,7 +2070,7 @@ test_serpent(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = sizeof(serp_tv[i].plaintext); sg[0].length = sizeof(serp_tv[i].plaintext);
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -2133,7 +2133,7 @@ test_aes(void) ...@@ -2133,7 +2133,7 @@ test_aes(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = aes_tv[i].plen; sg[0].length = aes_tv[i].plen;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("encrypt() failed flags=%x\n", tfm->crt_flags); printk("encrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
...@@ -2175,7 +2175,7 @@ test_aes(void) ...@@ -2175,7 +2175,7 @@ test_aes(void)
sg[0].page = virt_to_page(p); sg[0].page = virt_to_page(p);
sg[0].offset = ((long) p & ~PAGE_MASK); sg[0].offset = ((long) p & ~PAGE_MASK);
sg[0].length = aes_tv[i].plen; sg[0].length = aes_tv[i].plen;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
if (ret) { if (ret) {
printk("decrypt() failed flags=%x\n", tfm->crt_flags); printk("decrypt() failed flags=%x\n", tfm->crt_flags);
goto out; goto out;
......
...@@ -23,8 +23,8 @@ D(7) KM_PTE0, ...@@ -23,8 +23,8 @@ D(7) KM_PTE0,
D(8) KM_PTE1, D(8) KM_PTE1,
D(9) KM_IRQ0, D(9) KM_IRQ0,
D(10) KM_IRQ1, D(10) KM_IRQ1,
D(11) KM_CRYPTO_USER, D(11) KM_SOFTIRQ0,
D(12) KM_CRYPTO_SOFTIRQ, D(12) KM_SOFTIRQ1,
D(13) KM_TYPE_NR D(13) KM_TYPE_NR
}; };
......
...@@ -22,8 +22,8 @@ D(8) KM_PTE1, ...@@ -22,8 +22,8 @@ D(8) KM_PTE1,
D(9) KM_PTE2, D(9) KM_PTE2,
D(10) KM_IRQ0, D(10) KM_IRQ0,
D(11) KM_IRQ1, D(11) KM_IRQ1,
D(12) KM_CRYPTO_USER, D(12) KM_SOFTIRQ0,
D(13) KM_CRYPTO_SOFTIRQ, D(13) KM_SOFTIRQ1,
D(14) KM_TYPE_NR D(14) KM_TYPE_NR
}; };
......
...@@ -21,8 +21,8 @@ D(7) KM_PTE0, ...@@ -21,8 +21,8 @@ D(7) KM_PTE0,
D(8) KM_PTE1, D(8) KM_PTE1,
D(9) KM_IRQ0, D(9) KM_IRQ0,
D(10) KM_IRQ1, D(10) KM_IRQ1,
D(11) KM_CRYPTO_USER, D(11) KM_SOFTIRQ0,
D(12) KM_CRYPTO_SOFTIRQ, D(12) KM_SOFTIRQ1,
D(13) KM_TYPE_NR D(13) KM_TYPE_NR
}; };
......
...@@ -14,8 +14,8 @@ enum km_type { ...@@ -14,8 +14,8 @@ enum km_type {
KM_PTE1, KM_PTE1,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -14,8 +14,8 @@ enum km_type { ...@@ -14,8 +14,8 @@ enum km_type {
KM_PTE1, KM_PTE1,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -14,8 +14,8 @@ enum km_type { ...@@ -14,8 +14,8 @@ enum km_type {
KM_PTE1, KM_PTE1,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -13,8 +13,8 @@ enum km_type { ...@@ -13,8 +13,8 @@ enum km_type {
KM_PTE1, KM_PTE1,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -17,8 +17,8 @@ enum km_type { ...@@ -17,8 +17,8 @@ enum km_type {
KM_PTE1, KM_PTE1,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -11,8 +11,8 @@ enum km_type { ...@@ -11,8 +11,8 @@ enum km_type {
KM_BIO_DST_IRQ, KM_BIO_DST_IRQ,
KM_IRQ0, KM_IRQ0,
KM_IRQ1, KM_IRQ1,
KM_CRYPTO_USER, KM_SOFTIRQ0,
KM_CRYPTO_SOFTIRQ, KM_SOFTIRQ1,
KM_TYPE_NR KM_TYPE_NR
}; };
......
...@@ -131,9 +131,13 @@ struct cipher_tfm { ...@@ -131,9 +131,13 @@ struct cipher_tfm {
int (*cit_setkey)(struct crypto_tfm *tfm, int (*cit_setkey)(struct crypto_tfm *tfm,
const u8 *key, unsigned int keylen); const u8 *key, unsigned int keylen);
int (*cit_encrypt)(struct crypto_tfm *tfm, int (*cit_encrypt)(struct crypto_tfm *tfm,
struct scatterlist *sg, unsigned int nsg); struct scatterlist *dst,
struct scatterlist *src,
unsigned int nbytes);
int (*cit_decrypt)(struct crypto_tfm *tfm, int (*cit_decrypt)(struct crypto_tfm *tfm,
struct scatterlist *sg, unsigned int nsg); struct scatterlist *dst,
struct scatterlist *src,
unsigned int nbytes);
void (*cit_xor_block)(u8 *dst, const u8 *src); void (*cit_xor_block)(u8 *dst, const u8 *src);
}; };
...@@ -274,19 +278,21 @@ static inline int crypto_cipher_setkey(struct crypto_tfm *tfm, ...@@ -274,19 +278,21 @@ static inline int crypto_cipher_setkey(struct crypto_tfm *tfm,
} }
static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm, static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm,
struct scatterlist *sg, struct scatterlist *dst,
unsigned int nsg) struct scatterlist *src,
unsigned int nbytes)
{ {
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
return tfm->crt_cipher.cit_encrypt(tfm, sg, nsg); return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes);
} }
static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm, static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm,
struct scatterlist *sg, struct scatterlist *dst,
unsigned int nsg) struct scatterlist *src,
unsigned int nbytes)
{ {
BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
return tfm->crt_cipher.cit_decrypt(tfm, sg, nsg); return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes);
} }
static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm, static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm,
......
...@@ -163,6 +163,7 @@ struct xfrm_usersa_info { ...@@ -163,6 +163,7 @@ struct xfrm_usersa_info {
struct xfrm_usersa_id { struct xfrm_usersa_id {
xfrm_address_t saddr; xfrm_address_t saddr;
__u32 spi; __u32 spi;
__u16 family;
__u8 proto; __u8 proto;
}; };
......
...@@ -167,7 +167,7 @@ static inline int ip_route_connect(struct rtable **rp, u32 dst, ...@@ -167,7 +167,7 @@ static inline int ip_route_connect(struct rtable **rp, u32 dst,
ip_rt_put(*rp); ip_rt_put(*rp);
*rp = NULL; *rp = NULL;
} }
return ip_route_output_flow(rp, &fl, sk, 1); return ip_route_output_flow(rp, &fl, sk, 0);
} }
static inline int ip_route_newports(struct rtable **rp, u16 sport, u16 dport, static inline int ip_route_newports(struct rtable **rp, u16 sport, u16 dport,
......
...@@ -105,7 +105,6 @@ struct xfrm_state ...@@ -105,7 +105,6 @@ struct xfrm_state
u16 family; u16 family;
xfrm_address_t saddr; xfrm_address_t saddr;
int header_len; int header_len;
int trailer_len;
} props; } props;
struct xfrm_lifetime_cfg lft; struct xfrm_lifetime_cfg lft;
......
...@@ -361,7 +361,7 @@ static int ah_init_state(struct xfrm_state *x, void *args) ...@@ -361,7 +361,7 @@ static int ah_init_state(struct xfrm_state *x, void *args)
ahp->icv = ah_hmac_digest; ahp->icv = ah_hmac_digest;
/* /*
* Lookup the algorithm description maintained by pfkey, * Lookup the algorithm description maintained by xfrm_algo,
* verify crypto transform properties, and store information * verify crypto transform properties, and store information
* we need for AH processing. This lookup cannot fail here * we need for AH processing. This lookup cannot fail here
* after a successful crypto_alloc_tfm(). * after a successful crypto_alloc_tfm().
......
...@@ -823,6 +823,34 @@ int unregister_inetaddr_notifier(struct notifier_block *nb) ...@@ -823,6 +823,34 @@ int unregister_inetaddr_notifier(struct notifier_block *nb)
return notifier_chain_unregister(&inetaddr_chain, nb); return notifier_chain_unregister(&inetaddr_chain, nb);
} }
/* Rename ifa_labels for a device name change. Make some effort to preserve existing
* alias numbering and to create unique labels if possible.
*/
static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
{
struct in_ifaddr *ifa;
int named = 0;
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
char old[IFNAMSIZ], *dot;
memcpy(old, ifa->ifa_label, IFNAMSIZ);
memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
if (named++ == 0)
continue;
dot = strchr(ifa->ifa_label, ':');
if (dot == NULL) {
sprintf(old, ":%d", named);
dot = old;
}
if (strlen(dot) + strlen(dev->name) < IFNAMSIZ) {
strcat(ifa->ifa_label, dot);
} else {
strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
}
}
}
/* Called only under RTNL semaphore */ /* Called only under RTNL semaphore */
static int inetdev_event(struct notifier_block *this, unsigned long event, static int inetdev_event(struct notifier_block *this, unsigned long event,
...@@ -873,14 +901,10 @@ static int inetdev_event(struct notifier_block *this, unsigned long event, ...@@ -873,14 +901,10 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
inetdev_destroy(in_dev); inetdev_destroy(in_dev);
break; break;
case NETDEV_CHANGENAME: case NETDEV_CHANGENAME:
if (in_dev->ifa_list) {
struct in_ifaddr *ifa;
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next)
memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
/* Do not notify about label change, this event is /* Do not notify about label change, this event is
not interesting to applications using netlink. * not interesting to applications using netlink.
*/ */
} inetdev_changename(dev, in_dev);
break; break;
} }
out: out:
......
This diff is collapsed.
...@@ -60,7 +60,7 @@ static void tcp_v6_send_check(struct sock *sk, struct tcphdr *th, int len, ...@@ -60,7 +60,7 @@ static void tcp_v6_send_check(struct sock *sk, struct tcphdr *th, int len,
struct sk_buff *skb); struct sk_buff *skb);
static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb); static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
static int tcp_v6_xmit(struct sk_buff *skb); static int tcp_v6_xmit(struct sk_buff *skb, int ipfragok);
static struct tcp_func ipv6_mapped; static struct tcp_func ipv6_mapped;
static struct tcp_func ipv6_specific; static struct tcp_func ipv6_specific;
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* created test case so that I was able to fix nasty bug * created test case so that I was able to fix nasty bug
* and many others. thanks. * and many others. thanks.
* *
* $Id: sch_htb.c,v 1.14 2002/09/28 12:55:22 devik Exp devik $ * $Id: sch_htb.c,v 1.17 2003/01/29 09:22:18 devik Exp devik $
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -71,16 +71,12 @@ ...@@ -71,16 +71,12 @@
#define HTB_HYSTERESIS 1/* whether to use mode hysteresis for speedup */ #define HTB_HYSTERESIS 1/* whether to use mode hysteresis for speedup */
#define HTB_QLOCK(S) spin_lock_bh(&(S)->dev->queue_lock) #define HTB_QLOCK(S) spin_lock_bh(&(S)->dev->queue_lock)
#define HTB_QUNLOCK(S) spin_unlock_bh(&(S)->dev->queue_lock) #define HTB_QUNLOCK(S) spin_unlock_bh(&(S)->dev->queue_lock)
#define HTB_VER 0x30007 /* major must be matched with number suplied by TC as version */ #define HTB_VER 0x3000a /* major must be matched with number suplied by TC as version */
#if HTB_VER >> 16 != TC_HTB_PROTOVER #if HTB_VER >> 16 != TC_HTB_PROTOVER
#error "Mismatched sch_htb.c and pkt_sch.h" #error "Mismatched sch_htb.c and pkt_sch.h"
#endif #endif
/* temporary debug defines to be removed after beta stage */
#define DEVIK_MEND(N)
#define DEVIK_MSTART(N)
/* debugging support; S is subsystem, these are defined: /* debugging support; S is subsystem, these are defined:
0 - netlink messages 0 - netlink messages
1 - enqueue 1 - enqueue
...@@ -421,7 +417,6 @@ static void htb_add_to_wait_tree (struct htb_sched *q, ...@@ -421,7 +417,6 @@ static void htb_add_to_wait_tree (struct htb_sched *q,
if ((delay <= 0 || delay > cl->mbuffer) && net_ratelimit()) if ((delay <= 0 || delay > cl->mbuffer) && net_ratelimit())
printk(KERN_ERR "HTB: suspicious delay in wait_tree d=%ld cl=%X h=%d\n",delay,cl->classid,debug_hint); printk(KERN_ERR "HTB: suspicious delay in wait_tree d=%ld cl=%X h=%d\n",delay,cl->classid,debug_hint);
#endif #endif
DEVIK_MSTART(9);
cl->pq_key = jiffies + PSCHED_US2JIFFIE(delay); cl->pq_key = jiffies + PSCHED_US2JIFFIE(delay);
if (cl->pq_key == jiffies) if (cl->pq_key == jiffies)
cl->pq_key++; cl->pq_key++;
...@@ -440,7 +435,6 @@ static void htb_add_to_wait_tree (struct htb_sched *q, ...@@ -440,7 +435,6 @@ static void htb_add_to_wait_tree (struct htb_sched *q,
} }
rb_link_node(&cl->pq_node, parent, p); rb_link_node(&cl->pq_node, parent, p);
rb_insert_color(&cl->pq_node, &q->wait_pq[cl->level]); rb_insert_color(&cl->pq_node, &q->wait_pq[cl->level]);
DEVIK_MEND(9);
} }
/** /**
...@@ -678,7 +672,6 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch) ...@@ -678,7 +672,6 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
struct htb_sched *q = (struct htb_sched *)sch->data; struct htb_sched *q = (struct htb_sched *)sch->data;
struct htb_class *cl = htb_classify(skb,sch); struct htb_class *cl = htb_classify(skb,sch);
DEVIK_MSTART(0);
if (cl == HTB_DIRECT || !cl) { if (cl == HTB_DIRECT || !cl) {
/* enqueue to helper queue */ /* enqueue to helper queue */
if (q->direct_queue.qlen < q->direct_qlen && cl) { if (q->direct_queue.qlen < q->direct_qlen && cl) {
...@@ -687,25 +680,20 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch) ...@@ -687,25 +680,20 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
} else { } else {
kfree_skb (skb); kfree_skb (skb);
sch->stats.drops++; sch->stats.drops++;
DEVIK_MEND(0);
return NET_XMIT_DROP; return NET_XMIT_DROP;
} }
} else if (cl->un.leaf.q->enqueue(skb, cl->un.leaf.q) != NET_XMIT_SUCCESS) { } else if (cl->un.leaf.q->enqueue(skb, cl->un.leaf.q) != NET_XMIT_SUCCESS) {
sch->stats.drops++; sch->stats.drops++;
cl->stats.drops++; cl->stats.drops++;
DEVIK_MEND(0);
return NET_XMIT_DROP; return NET_XMIT_DROP;
} else { } else {
cl->stats.packets++; cl->stats.bytes += skb->len; cl->stats.packets++; cl->stats.bytes += skb->len;
DEVIK_MSTART(1);
htb_activate (q,cl); htb_activate (q,cl);
DEVIK_MEND(1);
} }
sch->q.qlen++; sch->q.qlen++;
sch->stats.packets++; sch->stats.bytes += skb->len; sch->stats.packets++; sch->stats.bytes += skb->len;
HTB_DBG(1,1,"htb_enq_ok cl=%X skb=%p\n",cl?cl->classid:0,skb); HTB_DBG(1,1,"htb_enq_ok cl=%X skb=%p\n",cl?cl->classid:0,skb);
DEVIK_MEND(0);
return NET_XMIT_SUCCESS; return NET_XMIT_SUCCESS;
} }
...@@ -941,7 +929,6 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level) ...@@ -941,7 +929,6 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level)
//struct htb_sched *q = (struct htb_sched *)sch->data; //struct htb_sched *q = (struct htb_sched *)sch->data;
struct htb_class *cl,*start; struct htb_class *cl,*start;
/* look initial class up in the row */ /* look initial class up in the row */
DEVIK_MSTART(6);
start = cl = htb_lookup_leaf (q->row[level]+prio,prio,q->ptr[level]+prio); start = cl = htb_lookup_leaf (q->row[level]+prio,prio,q->ptr[level]+prio);
do { do {
...@@ -960,8 +947,6 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level) ...@@ -960,8 +947,6 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level)
cl = htb_lookup_leaf (q->row[level]+prio,prio,q->ptr[level]+prio); cl = htb_lookup_leaf (q->row[level]+prio,prio,q->ptr[level]+prio);
} while (cl != start); } while (cl != start);
DEVIK_MEND(6);
DEVIK_MSTART(7);
if (likely(skb != NULL)) { if (likely(skb != NULL)) {
if ((cl->un.leaf.deficit[level] -= skb->len) < 0) { if ((cl->un.leaf.deficit[level] -= skb->len) < 0) {
HTB_DBG(4,2,"htb_next_cl oldptr=%p quant_add=%d\n", HTB_DBG(4,2,"htb_next_cl oldptr=%p quant_add=%d\n",
...@@ -973,11 +958,8 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level) ...@@ -973,11 +958,8 @@ htb_dequeue_tree(struct htb_sched *q,int prio,int level)
gives us slightly better performance */ gives us slightly better performance */
if (!cl->un.leaf.q->q.qlen) if (!cl->un.leaf.q->q.qlen)
htb_deactivate (q,cl); htb_deactivate (q,cl);
DEVIK_MSTART(8);
htb_charge_class (q,cl,level,skb->len); htb_charge_class (q,cl,level,skb->len);
DEVIK_MEND(8);
} }
DEVIK_MEND(7);
return skb; return skb;
} }
...@@ -1005,6 +987,9 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) ...@@ -1005,6 +987,9 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
struct htb_sched *q = (struct htb_sched *)sch->data; struct htb_sched *q = (struct htb_sched *)sch->data;
int level; int level;
long min_delay; long min_delay;
#ifdef HTB_DEBUG
int evs_used = 0;
#endif
HTB_DBG(3,1,"htb_deq dircnt=%d qlen=%d\n",skb_queue_len(&q->direct_queue), HTB_DBG(3,1,"htb_deq dircnt=%d qlen=%d\n",skb_queue_len(&q->direct_queue),
sch->q.qlen); sch->q.qlen);
...@@ -1016,27 +1001,26 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) ...@@ -1016,27 +1001,26 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
return skb; return skb;
} }
DEVIK_MSTART(2);
if (!sch->q.qlen) goto fin; if (!sch->q.qlen) goto fin;
PSCHED_GET_TIME(q->now); PSCHED_GET_TIME(q->now);
min_delay = HZ*5; min_delay = LONG_MAX;
q->nwc_hit = 0; q->nwc_hit = 0;
for (level = 0; level < TC_HTB_MAXDEPTH; level++) { for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
/* common case optimization - skip event handler quickly */ /* common case optimization - skip event handler quickly */
int m; int m;
long delay; long delay;
DEVIK_MSTART(3);
if (jiffies - q->near_ev_cache[level] < 0x80000000 || 0) { if (jiffies - q->near_ev_cache[level] < 0x80000000 || 0) {
delay = htb_do_events(q,level); delay = htb_do_events(q,level);
q->near_ev_cache[level] += delay ? delay : HZ; q->near_ev_cache[level] += delay ? delay : HZ;
#ifdef HTB_DEBUG
evs_used++;
#endif
} else } else
delay = q->near_ev_cache[level] - jiffies; delay = q->near_ev_cache[level] - jiffies;
if (delay && min_delay > delay) if (delay && min_delay > delay)
min_delay = delay; min_delay = delay;
DEVIK_MEND(3);
DEVIK_MSTART(5);
m = ~q->row_mask[level]; m = ~q->row_mask[level];
while (m != (int)(-1)) { while (m != (int)(-1)) {
int prio = ffz (m); int prio = ffz (m);
...@@ -1045,24 +1029,24 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) ...@@ -1045,24 +1029,24 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
if (likely(skb != NULL)) { if (likely(skb != NULL)) {
sch->q.qlen--; sch->q.qlen--;
sch->flags &= ~TCQ_F_THROTTLED; sch->flags &= ~TCQ_F_THROTTLED;
DEVIK_MEND(5);
goto fin; goto fin;
} }
} }
DEVIK_MEND(5);
} }
DEVIK_MSTART(4);
#ifdef HTB_DEBUG #ifdef HTB_DEBUG
if (!q->nwc_hit && min_delay >= 5*HZ && net_ratelimit()) { if (!q->nwc_hit && min_delay >= 10*HZ && net_ratelimit()) {
printk(KERN_ERR "HTB: mindelay=%ld, report it please !\n",min_delay); if (min_delay == LONG_MAX) {
printk(KERN_ERR "HTB: dequeue bug (%d), report it please !\n",
evs_used);
htb_debug_dump(q); htb_debug_dump(q);
} else
printk(KERN_WARNING "HTB: mindelay=%ld, some class has "
"too small rate\n",min_delay);
} }
#endif #endif
htb_delay_by (sch,min_delay); htb_delay_by (sch,min_delay > 5*HZ ? 5*HZ : min_delay);
DEVIK_MEND(4);
fin: fin:
HTB_DBG(3,1,"htb_deq_end %s j=%lu skb=%p\n",sch->dev->name,jiffies,skb); HTB_DBG(3,1,"htb_deq_end %s j=%lu skb=%p\n",sch->dev->name,jiffies,skb);
DEVIK_MEND(2);
return skb; return skb;
} }
...@@ -1433,6 +1417,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1433,6 +1417,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
if (!rtab || !ctab) goto failure; if (!rtab || !ctab) goto failure;
if (!cl) { /* new class */ if (!cl) { /* new class */
struct Qdisc *new_q;
/* check for valid classid */ /* check for valid classid */
if (!classid || TC_H_MAJ(classid^sch->handle) || htb_find(classid,sch)) if (!classid || TC_H_MAJ(classid^sch->handle) || htb_find(classid,sch))
goto failure; goto failure;
...@@ -1456,6 +1441,10 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1456,6 +1441,10 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
cl->magic = HTB_CMAGIC; cl->magic = HTB_CMAGIC;
#endif #endif
/* create leaf qdisc early because it uses kmalloc(GPF_KERNEL)
so that can't be used inside of sch_tree_lock
-- thanks to Karlis Peisenieks */
new_q = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops);
sch_tree_lock(sch); sch_tree_lock(sch);
if (parent && !parent->level) { if (parent && !parent->level) {
/* turn parent into inner node */ /* turn parent into inner node */
...@@ -1474,8 +1463,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1474,8 +1463,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
memset (&parent->un.inner,0,sizeof(parent->un.inner)); memset (&parent->un.inner,0,sizeof(parent->un.inner));
} }
/* leaf (we) needs elementary qdisc */ /* leaf (we) needs elementary qdisc */
if (!(cl->un.leaf.q = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops))) cl->un.leaf.q = new_q ? new_q : &noop_qdisc;
cl->un.leaf.q = &noop_qdisc;
cl->classid = classid; cl->parent = parent; cl->classid = classid; cl->parent = parent;
...@@ -1503,11 +1491,11 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1503,11 +1491,11 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
if (!cl->level) { if (!cl->level) {
cl->un.leaf.quantum = rtab->rate.rate / q->rate2quantum; cl->un.leaf.quantum = rtab->rate.rate / q->rate2quantum;
if (!hopt->quantum && cl->un.leaf.quantum < 1000) { if (!hopt->quantum && cl->un.leaf.quantum < 1000) {
printk(KERN_WARNING "HTB: quantum of class %X is small. Consider r2q change.", cl->classid); printk(KERN_WARNING "HTB: quantum of class %X is small. Consider r2q change.\n", cl->classid);
cl->un.leaf.quantum = 1000; cl->un.leaf.quantum = 1000;
} }
if (!hopt->quantum && cl->un.leaf.quantum > 200000) { if (!hopt->quantum && cl->un.leaf.quantum > 200000) {
printk(KERN_WARNING "HTB: quantum of class %X is big. Consider r2q change.", cl->classid); printk(KERN_WARNING "HTB: quantum of class %X is big. Consider r2q change.\n", cl->classid);
cl->un.leaf.quantum = 200000; cl->un.leaf.quantum = 200000;
} }
if (hopt->quantum) if (hopt->quantum)
......
...@@ -78,7 +78,7 @@ krb5_encrypt( ...@@ -78,7 +78,7 @@ krb5_encrypt(
sg[0].offset = ((long)out & ~PAGE_MASK); sg[0].offset = ((long)out & ~PAGE_MASK);
sg[0].length = length; sg[0].length = length;
ret = crypto_cipher_encrypt(tfm, sg, 1); ret = crypto_cipher_encrypt(tfm, sg, sg, length);
out: out:
dprintk("gss_k5encrypt returns %d\n",ret); dprintk("gss_k5encrypt returns %d\n",ret);
...@@ -117,7 +117,7 @@ krb5_decrypt( ...@@ -117,7 +117,7 @@ krb5_decrypt(
sg[0].offset = ((long)out & ~PAGE_MASK); sg[0].offset = ((long)out & ~PAGE_MASK);
sg[0].length = length; sg[0].length = length;
ret = crypto_cipher_decrypt(tfm, sg, 1); ret = crypto_cipher_decrypt(tfm, sg, sg, length);
out: out:
dprintk("gss_k5decrypt returns %d\n",ret); dprintk("gss_k5decrypt returns %d\n",ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment