/* * simple_lb.c * * Copyright (c) 2004 Evgeniy Polyakov * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include "crypto_lb.h" static void simple_lb_rehash(struct crypto_lb *); static struct crypto_device *simple_lb_find_device(struct crypto_lb *, struct crypto_session_initializer *); struct crypto_lb simple_lb = { .name = "simple_lb", .rehash = simple_lb_rehash, .find_device = simple_lb_find_device }; static void simple_lb_rehash(struct crypto_lb *lb) { BUG_ON(!lb->crypto_device_list); BUG_ON(!lb->crypto_device_lock); } static struct crypto_device *simple_lb_find_device(struct crypto_lb *lb, struct crypto_session_initializer *ci) { struct crypto_device *dev, *__dev; int min = 0x7ffffff; __dev = NULL; list_for_each_entry(dev, lb->crypto_device_list, cdev_entry) { if (device_broken(dev)) continue; if (!match_initializer(dev, ci)) continue; if (atomic_read(&dev->refcnt) < min) { min = atomic_read(&dev->refcnt); __dev = dev; } } return __dev; } int __devinit simple_lb_init(void) { dprintk(KERN_INFO "Registering simple crypto load balancer.\n"); return crypto_lb_register(&simple_lb, 1, 1); } void __devexit simple_lb_fini(void) { dprintk(KERN_INFO "Unregistering simple crypto load balancer.\n"); crypto_lb_unregister(&simple_lb); } module_init(simple_lb_init); module_exit(simple_lb_fini); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Evgeniy Polyakov "); MODULE_DESCRIPTION("Simple crypto load balancer.");