2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:30 +09:00
|
|
|
|
2011-10-24 11:43:31 +02:00
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
2013-03-04 14:36:27 +05:30
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2012-03-06 22:34:26 +00:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:51 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:19 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:55:47 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-06 22:34:26 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-06 17:20:12 +00:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:19 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2011-12-26 18:55:47 +09:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-08-04 23:37:53 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
2011-09-02 09:44:30 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:31 +09:00
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-25 16:07:46 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-01-11 20:08:39 +01:00
|
|
|
|
2011-07-25 16:05:04 -05:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:28 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:55:47 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-07 13:17:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-07 13:17:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-16 11:52:43 +00:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
dmaengine: pl330: fix bug that cause start the same descs in cyclic
This bug will cause NULL pointer after commit dfac17, and cause
wrong package in I2S DMA transfer before commit dfac17.
Tested on RK3288-pinky2 board.
Detail:
I2S DMA transfer(sound/core/pcm_dmaengine.c):
dmaengine_pcm_prepare_and_submit -->
dmaengine_prep_dma_cyclic -->
pl330_prep_dma_cyclic -->
the case:
1. pl330_submit_req(desc0): thrd->req[0].desc = desc0, thrd->lstenq = 0
2. pl330_submit_req(desc1): thrd->req[1].desc = desc1, thrd->lstenq = 1
3. _start(desc0) by submit_req: thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
4. pl330_update(desc0 OK): thrd->req[0].desc = NULL, desc0 to req_done list
because: idx = active = thrd->req_running = 0
5. _start(desc1) by pl330_update: thrd->req_running = 1
because:
idx = 1 - thrd->lstenq = 0, but thrd->req[0].desc == NULL,
so:
idx = thrd->lstenq = 1
6. pl330_submit_req(desc2): thrd->req[0].desc = desc2, thrd->lstenq = 0
7. _start(desc1) by submit_req: thrd->req_running = 1
because: idx = 1 - thrd->lstenq = 1
Note: _start started the same descs
_start should start desc2 here, NOT desc1
8. pl330_update(desc1 OK): thrd->req[1].desc = NULL, desc1 to req_done list
because: idx = active = thrd->req_running = 1
9. _start(desc2) by pl330_update : thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
10.pl330_update(desc1 OK, NOT desc2): thrd->req[0].desc = NULL,
desc2 to req_done list
because: idx = active = thrd->req_running = 0
11.pl330_submit_req(desc3): thrd->req[0].desc = desc3, thrd->lstenq = 0
12.pl330_submit_req(desc4): thrd->req[1].desc = desc4, thrd->lstenq = 1
13._start(desc3) by submit_req: thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
14.pl330_update(desc2 OK NOT desc3): thrd->req[0].desc = NULL
desc3 to req_done list
because: idx = active = thrd->req_running = 0
15._start(desc4) by pl330_update: thrd->req_running = 1
because:
idx = 1 - thrd->lstenq = 0, but thrd->req[0].desc == NULL,
so:
idx = thrd->lstenq = 1
16.pl330_submit_req(desc5): thrd->req[0].desc = desc5, thrd->lstenq = 0
17._start(desc4) by submit_req: thrd->req_running = 1
because: idx = 1 - thrd->lstenq = 1
18.pl330_update(desc3 OK NOT desc4): thrd->req[1].desc = NULL
desc4 to req_done list
because: idx = active = thrd->req_running = 1
19._start(desc4) by pl330_update: thrd->req_running = 0
because:
idx = 1 - thrd->lstenq = 1, but thrd->req[1].desc == NULL,
so:
idx = thrd->lstenq = 0
20.pl330_update(desc4 OK): thrd->req[0].desc = NULL, desc5 to req_done list
because: idx = active = thrd->req_running = 0
21.pl330_update(desc4 OK):
1) before commit dfac17(set req_running -1 in pl330_update/mark_free()):
because: active = -1, abort
result: desc0-desc5's callback are all called,
but step 10 and step 18 go wrong.
2) before commit dfac17:
idx = active = thrd->req_runnig = 0 -->
descdone = thrd->req[0] = NULL -->
list_add_tail(&descdone->rqd, &pl330->req_done); -->
got NULL pointer!!!
Signed-off-by: Addy Ke <addy.ke@rock-chips.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2014-12-08 19:28:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2011-12-26 18:55:47 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-25 09:00:53 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-25 09:00:53 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2014-07-06 20:32:18 +02:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:18 +02:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:18 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-23 18:04:49 +02:00
|
|
|
|
2016-01-22 19:06:44 +08:00
|
|
|
|
2015-07-23 18:04:49 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2014-07-06 20:32:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2015-06-03 21:26:41 +00:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2014-07-06 20:32:25 +02:00
|
|
|
|
2014-07-19 03:21:47 +02:00
|
|
|
|
2014-07-06 20:32:25 +02:00
|
|
|
|
|
|
|
|
|
2014-07-19 03:21:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-13 15:07:00 +01:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2012-06-13 15:07:00 +01:00
|
|
|
|
dmaengine: pl330: fix bug that cause start the same descs in cyclic
This bug will cause NULL pointer after commit dfac17, and cause
wrong package in I2S DMA transfer before commit dfac17.
Tested on RK3288-pinky2 board.
Detail:
I2S DMA transfer(sound/core/pcm_dmaengine.c):
dmaengine_pcm_prepare_and_submit -->
dmaengine_prep_dma_cyclic -->
pl330_prep_dma_cyclic -->
the case:
1. pl330_submit_req(desc0): thrd->req[0].desc = desc0, thrd->lstenq = 0
2. pl330_submit_req(desc1): thrd->req[1].desc = desc1, thrd->lstenq = 1
3. _start(desc0) by submit_req: thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
4. pl330_update(desc0 OK): thrd->req[0].desc = NULL, desc0 to req_done list
because: idx = active = thrd->req_running = 0
5. _start(desc1) by pl330_update: thrd->req_running = 1
because:
idx = 1 - thrd->lstenq = 0, but thrd->req[0].desc == NULL,
so:
idx = thrd->lstenq = 1
6. pl330_submit_req(desc2): thrd->req[0].desc = desc2, thrd->lstenq = 0
7. _start(desc1) by submit_req: thrd->req_running = 1
because: idx = 1 - thrd->lstenq = 1
Note: _start started the same descs
_start should start desc2 here, NOT desc1
8. pl330_update(desc1 OK): thrd->req[1].desc = NULL, desc1 to req_done list
because: idx = active = thrd->req_running = 1
9. _start(desc2) by pl330_update : thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
10.pl330_update(desc1 OK, NOT desc2): thrd->req[0].desc = NULL,
desc2 to req_done list
because: idx = active = thrd->req_running = 0
11.pl330_submit_req(desc3): thrd->req[0].desc = desc3, thrd->lstenq = 0
12.pl330_submit_req(desc4): thrd->req[1].desc = desc4, thrd->lstenq = 1
13._start(desc3) by submit_req: thrd->req_running = 0
because: idx = 1 - thrd->lstenq = 0
14.pl330_update(desc2 OK NOT desc3): thrd->req[0].desc = NULL
desc3 to req_done list
because: idx = active = thrd->req_running = 0
15._start(desc4) by pl330_update: thrd->req_running = 1
because:
idx = 1 - thrd->lstenq = 0, but thrd->req[0].desc == NULL,
so:
idx = thrd->lstenq = 1
16.pl330_submit_req(desc5): thrd->req[0].desc = desc5, thrd->lstenq = 0
17._start(desc4) by submit_req: thrd->req_running = 1
because: idx = 1 - thrd->lstenq = 1
18.pl330_update(desc3 OK NOT desc4): thrd->req[1].desc = NULL
desc4 to req_done list
because: idx = active = thrd->req_running = 1
19._start(desc4) by pl330_update: thrd->req_running = 0
because:
idx = 1 - thrd->lstenq = 1, but thrd->req[1].desc == NULL,
so:
idx = thrd->lstenq = 0
20.pl330_update(desc4 OK): thrd->req[0].desc = NULL, desc5 to req_done list
because: idx = active = thrd->req_running = 0
21.pl330_update(desc4 OK):
1) before commit dfac17(set req_running -1 in pl330_update/mark_free()):
because: active = -1, abort
result: desc0-desc5's callback are all called,
but step 10 and step 18 go wrong.
2) before commit dfac17:
idx = active = thrd->req_runnig = 0 -->
descdone = thrd->req[0] = NULL -->
list_add_tail(&descdone->rqd, &pl330->req_done); -->
got NULL pointer!!!
Signed-off-by: Addy Ke <addy.ke@rock-chips.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2014-12-08 19:28:20 +08:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2014-07-06 20:32:31 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-01-06 18:58:14 +05:30
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2017-01-06 18:58:14 +05:30
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-26 18:49:52 +09:00
|
|
|
|
|
|
|
|
|
2011-10-24 11:43:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-02-13 16:13:14 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-23 16:47:31 +05:30
|
|
|
|
2012-05-11 11:24:41 +05:30
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
2016-07-20 13:12:35 -07:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-07-20 13:12:35 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-18 19:35:23 +02:00
|
|
|
|
|
|
|
|
|
2016-07-20 13:12:35 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
2016-07-20 13:12:35 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-01-11 20:08:39 +01:00
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-11 20:08:39 +01:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-01-11 20:08:39 +01:00
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-02-14 09:10:06 +05:30
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2012-03-06 22:35:47 +00:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2012-09-17 09:57:45 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-09-02 09:44:32 +09:00
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2015-05-21 09:34:09 +09:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:31 +09:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:32 +02:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:31 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-05-21 09:34:09 +09:00
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
|
|
|
|
|
2015-05-21 09:34:09 +09:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:18 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-16 11:52:44 +00:00
|
|
|
|
2015-02-11 13:23:18 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2013-07-03 15:00:43 -07:00
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dmaengine: pl330: fix double lock
The static bug finder EBA (http://www.iagoabal.eu/eba/) reported the
following double-lock bug:
Double lock:
1. spin_lock_irqsave(pch->lock, flags) at pl330_free_chan_resources:2236;
2. call to function `pl330_release_channel' immediately after;
3. call to function `dma_pl330_rqcb' in line 1753;
4. spin_lock_irqsave(pch->lock, flags) at dma_pl330_rqcb:1505.
I have fixed it as suggested by Marek Szyprowski.
First, I have replaced `pch->lock' with `pl330->lock' in functions
`pl330_alloc_chan_resources' and `pl330_free_chan_resources'. This avoids
the double-lock by acquiring a different lock than `dma_pl330_rqcb'.
NOTE that, as a result, `pl330_free_chan_resources' executes
`list_splice_tail_init' on `pch->work_list' under lock `pl330->lock',
whereas in the rest of the code `pch->work_list' is protected by
`pch->lock'. I don't know if this may cause race conditions. Similarly
`pch->cyclic' is written by `pl330_alloc_chan_resources' under
`pl330->lock' but read by `pl330_tx_submit' under `pch->lock'.
Second, I have removed locking from `pl330_request_channel' and
`pl330_release_channel' functions. Function `pl330_request_channel' is
only called from `pl330_alloc_chan_resources', so the lock is already
held. Function `pl330_release_channel' is called from
`pl330_free_chan_resources', which already holds the lock, and from
`pl330_del'. Function `pl330_del' is called in an error path of
`pl330_probe' and at the end of `pl330_remove', but I assume that there
cannot be concurrent accesses to the protected data at those points.
Signed-off-by: Iago Abal <mail@iagoabal.eu>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2017-01-11 14:00:21 +01:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2015-03-16 11:52:44 +00:00
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-01 16:44:27 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
2016-08-18 17:59:59 -07:00
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-23 17:16:55 +08:00
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-18 17:59:59 -07:00
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-18 17:59:59 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-16 11:52:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-23 17:16:55 +08:00
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-16 11:39:11 +01:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-06-15 23:00:09 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2012-03-06 22:34:46 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
2012-03-06 22:34:46 +00:00
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:19 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-12-02 18:01:30 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-10-24 11:43:11 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-11-07 18:05:18 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
2012-03-08 15:35:13 -05:00
|
|
|
|
2014-08-01 12:20:10 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2016-02-25 09:00:53 +08:00
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
2013-07-23 10:24:50 +02:00
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-05-26 00:40:05 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2011-07-25 16:05:04 -05:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2015-05-26 00:40:05 +05:30
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-11-07 18:05:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-07 18:05:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2015-06-15 17:25:16 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-08-09 20:11:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-08-09 20:11:33 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-08-09 20:11:33 +09:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-08-09 20:11:33 +09:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-08-09 20:11:33 +09:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2011-10-13 22:34:23 +05:30
|
|
|
|
2012-03-08 15:35:13 -05:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:30 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2011-10-24 11:43:11 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-13 22:34:23 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:30 +09:00
|
|
|
|
2016-02-25 09:00:53 +08:00
|
|
|
|
2014-07-06 20:32:30 +02:00
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-15 17:53:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-18 12:17:56 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-11-19 13:22:55 -05:00
|
|
|
|
2011-02-19 15:55:00 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-25 16:05:04 -05:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-06-27 10:29:32 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2016-06-07 18:38:41 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-11-06 11:39:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-27 07:31:03 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2016-01-22 19:06:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2011-09-02 09:44:29 +09:00
|
|
|
|
2013-11-08 12:50:24 +03:00
|
|
|
|
2013-09-30 08:50:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-09-30 08:50:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-09-04 16:40:17 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-27 07:31:03 +02:00
|
|
|
|
2012-04-08 16:26:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2014-01-11 20:08:39 +01:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2012-09-17 15:20:23 +05:30
|
|
|
|
2012-11-15 06:27:50 +00:00
|
|
|
|
2012-09-17 15:20:23 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2011-07-25 16:05:04 -05:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2017-03-27 07:31:03 +02:00
|
|
|
|
2014-01-11 20:08:38 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-08-27 20:34:05 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:26 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2017-05-19 15:06:44 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-27 07:31:03 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-24 11:43:31 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-02 09:44:33 +09:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
2015-02-11 13:23:18 +01:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-11-17 14:42:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-02-11 13:23:17 +01:00
|
|
|
|
2016-01-22 19:06:51 +08:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-11-25 16:07:46 +01:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-11-25 16:07:46 +01:00
|
|
|
|
2013-09-02 21:54:48 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-11-06 17:20:12 +00:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-29 14:42:20 +02:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
2014-09-29 14:42:20 +02:00
|
|
|
|
|
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-21 15:09:59 -08:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2016-07-05 10:02:16 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-11-14 09:48:57 +01:00
|
|
|
|
|
|
|
|
|
2013-03-05 14:55:31 +05:30
|
|
|
|
|
|
|
|
|
2013-02-14 09:10:07 +05:30
|
|
|
|
2016-07-05 10:02:16 +05:30
|
|
|
|
|
|
|
|
|
2017-06-01 19:22:01 +01:00
|
|
|
|
|
|
|
|
|
2016-07-05 10:02:16 +05:30
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-09-29 14:42:21 +02:00
|
|
|
|
2014-11-17 14:42:29 +01:00
|
|
|
|
2014-09-29 14:42:21 +02:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
2014-07-06 20:32:29 +02:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-08-23 21:57:31 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-05 15:15:20 +01:00
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-18 12:17:56 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-15 10:40:38 +01:00
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2014-12-05 19:07:49 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
|
|
|
|
|